sql多行合並
『壹』 sql中按條件多行值合並成一列
修改前:1列多行數據
示例語句
select類別,名稱=(stuff((select','+名稱fromTable_Awhere類別=A.類別forxmlpath('')),1,1,''))fromTable_AasAgroupby類別
『貳』 SQL多行合並為一行,SQL語句如何寫
最簡捷直觀的方法就是利用分組
selectID,
Sum(語文)語文,
Sum(數學)數學,
Sum(英語)英語
fromscores
groupbyID
你可以直接用下面的語句在SQL Server中測試結果:
DECLARE@ScoresVartable(
IDintNOTNULL,
Chineseint,
Mathint,
Englishint);
Insertinto@ScoresVar
values(1,70,null,null)
Insertinto@ScoresVar
values(1,null,80,null)
Insertinto@ScoresVar
values(1,null,null,90)
Insertinto@ScoresVar
values(2,75,null,null)
Insertinto@ScoresVar
values(2,null,85,null)
Insertinto@ScoresVar
values(2,null,null,95)
selectID,
SUM(Chinese)Chinese,
Sum(Math)Math,
Sum(English)English
from@ScoresVar
groupbyID
還有一種方法,可能更通用一點,利用 FOR XML PATH 和STUFF函數來做,雖然復雜,但是對表的數據類型無限制。
還是上面的測試數據,你可以通過下面的代碼來得到你想要的數據:
SELECTID,
STUFF((SELECT','+Cast(A.Chineseasvarchar)
[email protected]=B.IDFORXMLPATH('')),1,1,'')AsChinese,
STUFF((SELECT','+Cast(A.Mathasvarchar)
[email protected]=B.IDFORXMLPATH('')),1,1,'')AsMath,
STUFF((SELECT','+Cast(A.Englishasvarchar)
[email protected]=B.IDFORXMLPATH('')),1,1,'')AsEnglish
From@ScoresVarB
GroupByID
--輸出結果
IDChineseMathEnglish
1708090
2758595
『叄』 SQL 多行多列數據清洗合並為一行
SELECT
A,
GROUP_CONCAT( B SEPARATOR ',' ),
GROUP_CONCAT( C SEPARATOR ',' )
FROM
table_name
GROUP BY
A
1.GROUP_CONCAT()中的值為你要合並的數據的欄位名;
2.SEPARATOR 函數是用來分隔這些要合並的數據的 ,' ' 中是你要用哪個符號來分隔,可以直接不填符號默認為空值;
2.必須要用GROUP BY 語句來進行分組管理,不然所有的數據都會被合並成一條記錄
參考鏈接
https://www.cnblogs.com/shoshana-kong/p/11147690.html
『肆』 sql多行多列合並成一行多列,
您好利用分析函數 sum max min 等均可實現此功能(oracle 中 空值不參與大小比較(11g是這樣的 其他版本需要你自己測試相愛))
如:
select 產品, max(標價),max(二標價),max(三標價) from table group by 產品;
或者
select 產品, sum(標價)),sum(二標價),sum(三標價) from table group by 產品;