【发布时间】:2015-01-24 15:30:21
【问题描述】:
我有如下表 Tab1(我的实际表有多达 20,000 行
a b c statecode
-------------------------------------------
A1 abc def FL
B1 abc def AZ
C1 abc def MI
D1 abc def CO
E1 abc def IL
F1 abc def CA
这是我想要做的:对于给定的 b 和 c 列组合,如果存在多行,那么我想连接一个逗号分隔的“a - statecode”。
我需要如下结果...
a b c statecode output
-------------------------------------------
A1 abc def FL A1-FL,B1-AZ,C1-MI,D1-CO,E1-IL,F1-CA
我尝试了什么: 我为此尝试了 sql stuff 函数
SELECT a, b,c,
STUFF((SELECT distinct ', '+ t1.a +'-'+ t1.statecode
FROM Tab1 t1
where t2.b = t1.a
and t2.c= t1.c
FOR XML PATH('')), 1, 1,'') AS output
from Tab1 t2;
这适用于相对较小的表,我的实际表有 20,000 行和 15 列,我必须检查 10 列组合的相等性(如本例中的 b、c 还有 8 个)。
有没有更好的方法在 sql 中做到这一点?或者提高 stuff 函数的性能?
【问题讨论】:
-
我遇到了同样的问题并寻找答案并到达这里。当我读到情况并非如此时,我尝试绕过我的查询,我所做的是将整个 XML Sub Select 左连接到主查询。
标签: sql sql-server group-by sql-server-2012