有什麼方法可以更改通常會將具有相同值的多個行返回到單行的SQL查詢嗎?SQL查詢多行成單行
例如,如果我現有的查詢返回這樣的:
ColA ColB
1 AA
1 BB
1 CC
2 AA
3 AA
我能更改查詢到只有3行返回,併爲1第二和第三結果放入第一行,這樣你有一排:1 AA BB CC
?
有什麼方法可以更改通常會將具有相同值的多個行返回到單行的SQL查詢嗎?SQL查詢多行成單行
例如,如果我現有的查詢返回這樣的:
ColA ColB
1 AA
1 BB
1 CC
2 AA
3 AA
我能更改查詢到只有3行返回,併爲1第二和第三結果放入第一行,這樣你有一排:1 AA BB CC
?
不是真的不錯,但工作(我從MySQL缺少group_concat
):
SELECT ColA,
ColB=STUFF(
(SELECT ' ' + ColB
FROM dbo.Table1 t2
WHERE t1.ColA = t2.ColA
FOR XML PATH (''))
, 1, 1, '')
FROM dbo.Table1 t1
GROUP BY ColA
[編輯:以任何理由推測SQL-服務器]
是的,我正在使用MS SQL Server。我明天會試試這個,謝謝。不過,這是否限制爲3次?有沒有辦法以所需的格式生成它,而不管你可能有多少次事件? – kmfdm
@kmfdm:大小如果組不重要。 –
我建議使用'value'函數,像這樣 - stuff((從dbo.Table1選擇''+ ColB作爲t2,其中t2.ColA = t1.ColA代表xml路徑('')).value('。')。 ,'nvarchar(max)'),1,1,'')',否則你的解決方案對於任意字符串是不正確的,比如'A&A'。例如,另請參閱此答案http://stackoverflow.com/a/12940952/1744834。 –
查找到'DISTINCT'或「GROUP BY」聲明。 –
也看看'工會'。 –
你使用了哪個數據庫? – Taryn