在 200,000 多条记录的 sqlserver 表中,我需要帮助更快地连接按其他列分组的某些列数据。例如,示例数据和预期结果如下所示。
在这里,我需要将最后一列连接ColumnA, ColumnB, ColumnC
为管道分隔的字符串,以便将这四列组合起来:
where KeyNumber=@strKeyNumber and Action=@strAction and Type=@strType and Code=@strCode
这四个是不同的组合。
我使用 t-sql STUFF 函数对此进行了编码,但它太慢了。我还使用 while 循环进行了不同的编码,但即使这样也太慢了。
所以我需要帮助来获得更快的结果。
这些列 A、B、C 中的数据是长字符串,因此连接的字符串应该是类型nvarchar(max)
。
表中的原始数据(某些列中可能存在重复):
ID KeyNumber Action Type Code ColumnA ColumnB ColumnC
1 1111111111 AC1 TYPE1 CODE1 ValueA1 ValueB1 ValueC1
2 1111111111 AC1 TYPE1 CODE1 ValueA2 ValueB2 ValueC2
3 1111111111 AC1 TYPE1 CODE1 ValueA2 ValueB2 ValueC3
4 1111111111 AC1 TYPE1 CODE1 ValueA3 ValueB3 ValueC4
5 2222222222 AC2 TYPE2 CODE2 ValA1 ValB1 ValC1
6 2222222222 AC2 TYPE2 CODE2 ValA2 ValB2 ValC2
7 2222222222 AC2 TYPE2 CODE2 ValA3 ValB3 ValC3
8 2222222222 AC2 TYPE2 CODE2 ValA4 ValB4 ValC4
9 2222222222 AC2 TYPE2 CODE2 ValA4 ValB5 ValC4
需要将结果数据放入如下新表中(上表中的重复值不应在此重复):
ID KeyNumber Action Type Code ColumnA ColumnB ColumnC
1 1111111111 AC1 TYPE1 CODE1 ValueA1|ValueA2|ValueA3 ValueB1|ValueB2|ValueB3 ValueC1|ValueC2|ValueC3|ValueC4
2 2222222222 AC2 TYPE2 CODE2 ValA1|ValA2|ValA3|ValA4 ValB1|ValB2|ValB3|ValB4|ValB5 ValC1|ValC2|ValC3|ValC4