我目前在SQL server 2005工作,表包含数百万行。 该表具有以下行和列
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
我想为多列组" ID,PO_ID,Event_ID"连接列item_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 :(得分: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)
上的索引。
答案 1 :(得分:0)
您可以在桌面上创建一个可以帮助您的索引