2016-12-16 35 views
1

我有這樣如何把在INSERT語句@Tablevariable的選擇列表中一個逗號分隔的列表

TableX 
    Id  ServiceID 
    1  10 
    1  20 
    1  30 
    2  15 
    2  25 
    2  35 

和表變量@TableA

declare @TableA table 
(
Id    int primary key, 
ServiceIdList varchar(max) 
) 

我需要@TableA表看起來像這樣

Id  ServiceIdList 
    1  10,20,30 
    2  15,25,35 

但我無法弄清楚插入語句的語法。如果可能,我想使用COALESCE,而不是STUFF。有人知道怎麼做嗎? 喜歡的東西

Insert @TableA 
select distinct X.Id, 
     coalesce(@TableA.ServiceIdList + ',', '') + cast(TableX.ServiceId as varchar) 
from TableX X 
group by X.Id, X.ServiceId 

非常感謝你提前

+1

'我需要@TableA看起來像this' ......不,你不能;應該避免在表格中存儲CSV,原始標準化表格沒有任何問題。 –

+1

@TimBiegeleisen,我認爲假設原始標準化表沒有任何錯誤,但沒有作者嘗試實現的某些上下文。鑑於所需的格式,我想這只是爲了顯示目的。並且由於請求將結果放入表變量中,這意味着它是暫時的。 – Adrian

+1

@Adrian如果出於展示目的,那麼我收回我說的話。但將CSV放入表格是一個常見的初學者錯誤,我想我會留下評論這個效果。 –

回答

2
Insert @TableA 
Select A.ID 
     ,ServiceIdList = (Select Stuff((Select Distinct ',' +cast(ServiceID as varchar(25)) From YourTable Where ID=A.ID For XML Path ('')),1,1,'')) 
From (Select Distinct ID From YourTable) A 

返回

ID ServiceIdList 
1 10,20,30 
2 15,25,35 
+0

謝謝John,我真的很感激。 –

+0

@ N.Mendenhall樂意幫忙 –

相關問題