iT邦幫忙

0

sql 相同資料合併

sql

各位大大好
我目前想從這個形式
https://ithelp.ithome.com.tw/upload/images/20200901/20118493aGddZItQrf.png
該如何在select中做到呢?
目前想了很久但都找不到我要的目前我只做到select出來的部分

感謝各位大大

==================================================================
先謝謝各位大大的回覆
不好意思可能我敘述的問題比較不好https://ithelp.ithome.com.tw/upload/images/20200901/201184931sWbmdc7YS.jpg

我需要把前面數字相同的後面那兩個欄位後面那兩個欄位並成一筆 請問各位大大一樣是用樞紐表嗎?還是有其他方法呢

employee aa bb cc

123456 __ xx __
123456 yy __ __
123456 __ __ zz
123457 kk __ __
123457 __ mm __
123458 pp __ __

我要如何將他合併為:
employee aa bb cc

123456 yy xx zz
123457 kk mm __
123458 pp __ __

大概是這樣的感覺

看更多先前的討論...收起先前的討論...
只能用SQL嗎?不能搭配程式語言來做這件事嗎?
PIVOT
石頭 iT邦研究生 2 級 ‧ 2020-09-01 14:47:44 檢舉
動態 PIVOT
@japhenchen 你好目前是只能用sql的方式去做
@石頭大大我剛剛才拜讀你的文章想請問我的問題更新的內容也是用動態pivot的方式嗎?
kekeke iT邦新手 5 級 ‧ 2020-09-01 15:10:16 檢舉
在Oracle中可以使用WMSYS.WM_CONCAT()這個函數將前面相同的部分用group by 合一起 不同的部分會用逗號分開,可以將多筆資料相同部分合併,多筆可以合併一筆,但欄位需相同~~可以參考看看~~
mayyola iT邦新手 1 級 ‧ 2020-09-02 08:58:50 檢舉
mysql 寫法,有誤請指正@_@

"select text,MAX(case when number='123' then number end ) as `number1`,MAX(case when number='1234' then number end ) as `number2`,MAX(case when number='12345' then number end ) as `number3`,MAX(case when number='123456' then number end ) as `number4`,MAX(case when number='1234567' then number end ) as `number5` from table group by text
尼克 iT邦高手 1 級 ‧ 2020-09-02 09:12:43 檢舉
你的問題描述,需要好好想想別人才能幫你!
尼克 好的如果之後還有問題我會想好問題的重點再發問的
我會銘記在心
mayyola 照著你的方法完成了,感謝你的幫忙
0

一般這種不定向位數量的寫法。
sql是很難辦到這件事的。

一般採取的做法是用json欄位來處理。
或是用concat_group函數結合處理。

0
尼克
iT邦高手 1 級 ‧ 2020-09-01 13:35:09

https://ithelp.ithome.com.tw/upload/images/20200901/20011825sZfFW9vOJT.png

0
詹姆士
iT邦新手 5 級 ‧ 2020-09-02 09:23:32

請參考, 有以下 3點 想法:

  1. 各廠牌db 推出的pivot 指令, 彼此互不相容.
    同時, 輸出欄位和欄位命名可能也有所限制 !
  2. 硬要在同一個 select 指令裡寫出整個處理, 不容易 !
    即使寫出來, 建議要實測它的效能是否能被接受 ?
    一旦出現 table-scan 將影響到整個系統的運作.
    建議評估設計為
    SQL user-defined function / stored procedure
  3. 將資料列傳遞至前端, 改由其它程式語言來處理 ?

借助程式語言豐富的指令, 達到彙整資料和轉置內容欄位的目的.

我要發表回答

立即登入回答