【问题标题】:Group concat in sql server for multiple column groups performancesql server 中的 Group_concat 用于多列组的性能
【发布时间】:2017-11-23 13:14:27
【问题描述】:

我目前在 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 或索引的权限。

【问题讨论】:

标签: sql sql-server tsql


【解决方案1】:

我建议这样写:

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) 上建立索引。

【讨论】:

    【解决方案2】:

    您可以在表上创建一个索引,这可以帮助您

    【讨论】:

      猜你喜欢
      • 2020-07-16
      • 2021-05-05
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 2011-10-20
      • 2012-02-10
      相关资源
      最近更新 更多