200,000以上のレコードのsqlserverテーブルで、他の列によってグループ化されたいくつかの列データのより高速な連結について支援が必要です。たとえば、サンプルデータと期待される結果を以下に示します。
ColumnA, ColumnB, ColumnC
ここでは、次のような4つの組み合わせのために、最後の列をパイプ区切りの文字列として連結する必要があります。
where KeyNumber=@strKeyNumber and Action=@strAction and Type=@strType and Code=@strCode
これらの4つは明確な組み合わせです。
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