2017-06-20 19 views
0

我目前在SQL Server 2005中工作,表中包含數百萬行。 表中有以下的行和列用於多個列組的sql server中的組concat性能

ID  PO_ID Event_ID Item_ID 
1  22  970  123456 
1  22  970  123457 
1  23  970  1234589 
1  22  971  12345790 
1  22  971  12345792 

我想Concat的列ITEM_ID多列組「身份證,PO_ID,EVENT_ID」 輸出會是這樣

ID  PO_ID Event_ID Item_ID 
    1  22  970  123456,123457 
    1  23  970  1234589 
    1  22  971  12345790,12345792 

我有以下SQL查詢

select ID, PO_ID, Event_ID, 
     substring(
        (SELECT ','+ Item_ID) 
        FROM table as a 
        WHERE a.ID=table.ID 
        AND a.PO_ID=table.PO_ID 
        and a.event_ID=table.event_ID 
        FOR XML PATH ('') 
        ) 
from table 
group by ID,PO_ID,Event_ID; 

但這種查詢是在性能方面很慢 有任何優化的方式做這在SQL Server 2005中? 任何幫助將不勝感激。

注意:我沒有創建UDF或索引的權限。

+0

您是否至少嘗試搜索解決方案? 它花了我幾秒鐘才發現: https://stackoverflow.com/questions/15154644/group-by-to-combine-concat-a-column –

+0

[GROUP BY之後連接一個字段]的可能重複(https://stackoverflow.com/questions/13647394/concatenate-one-field-after-group-by) –

+0

感謝您的回覆 是的我搜索解決方案,我有相同的SQL查詢上述問題。 根據以上解決方案 1)它使用SQL Server 2005不支持的東西功能。 2)除了子串之外,我的查詢與解決方案相同。我只是要求提供性能建議,因爲表中有100萬行 –

回答

0

我會建議寫這篇爲:

select ID, PO_ID, Event_ID, 
     stuff((select ',' + a.Item_ID) 
       from table a 
       where a.ID = t.ID and 
        a.PO_ID = t.PO_ID and 
        a.event_ID = t.event_ID 
       FOR XML PATH ('') 
      ), 1, 1, '' 
      ) as items 
from (select distinct ID, PO_ID, Event_ID 
     from table t 
    ) t; 

那麼對於性能,你想在(ID, PO_ID, Event_ID, Item_Id)的索引。

0

您可能在桌面上創建一個索引,這可以幫助您