以下は私が持っているテーブルの構造です: -
表T1
C1 C2 C3
----------
X P A
X P B
Y Q C
Y Q D
望ましい出力: -
C1 C2 C3
------------
X P A,B
Y Q C,D
注: - For XML('')
C1 と C2 で group by を使用して同じことができることはわかっていますが、私の場合の主な問題は、ここのテーブル T1 が物理テーブル オブジェクト (永続的または一時的またはテーブル変数または CTE) でなければならないことです。 DB。しかし、私の場合、それは派生テーブルであり、以下のクエリを使用しているときは、無効なオブジェクトと言っています。私の場合、派生テーブルを temp# テーブルや固定テーブル、さらには CTE やテーブル変数に置き換えるのは、多大な労力がかかるため良くありません。
SELECT
b.C1, b.C2, Stuff((',' + a.C3 from t1 a where a.c1 = b.c1 for XML PATH('')),1,1,'') FROM
T1 b group by b.c1,b.c2
固定テーブルとして T1 を持っていませんでした。派生テーブルのみとお考えください。
既存の派生テーブルを使用したソリューションが必要です。助けてください。
以下は、派生テーブルを使用したクエリです。 - これはデモ クエリとしてのみ考慮してください。以下に示すほど単純ではなく、派生テーブルを取得するために多くの計算が行われ、4 レベルの派生テーブルが使用されています。
SELECT C1, C2, Stuff((',' + a.C3 from A B where a.c1 = b.c1 for XML PATH('')),1,1,'')
FROM
(
SELECT C1, C2, C3 FROM T1 WHERE C1 IS NOT NULL--and a lot of calculation also
)A
T1 は 1 ステップ下ではないことに注意してください。私の場合、T1 の実際の物理テーブルは、派生テーブルによって 4 レベル下がっています。