2013-07-30 60 views
2

有什麼方法可以更改通常會將具有相同值的多個行返回到單行的SQL查詢嗎?SQL查詢多行成單行

例如,如果我現有的查詢返回這樣的:

ColA ColB 
1 AA 
1 BB 
1 CC 
2 AA 
3 AA 

我能更改查詢到只有3行返回,併爲1第二和第三結果放入第一行,這樣你有一排:1 AA BB CC

+0

查找到'DISTINCT'或「GROUP BY」聲明。 –

+0

也看看'工會'。 –

+0

你使用了哪個數據庫? – Taryn

回答

1

不是真的不錯,但工作(我從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 

Demo

[編輯:以任何理由推測SQL-服務器]

+0

是的,我正在使用MS SQL Server。我明天會試試這個,謝謝。不過,這是否限制爲3次?有沒有辦法以所需的格式生成它,而不管你可能有多少次事件? – kmfdm

+0

@kmfdm:大小如果組不重要。 –

+0

我建議使用'value'函數,像這樣 - stuff((從dbo.Table1選擇''+ ColB作爲t2,其中t2.ColA = t1.ColA代表xml路徑('')).value('。')。 ,'nvarchar(max)'),1,1,'')',否則你的解決方案對於任意字符串是不正確的,比如'A&A'。例如,另請參閱此答案http://stackoverflow.com/a/12940952/1744834。 –