1

私はTable1を持っています:

ID  Property
1   Name
2   City
3   Designation

および表 2:

ID  RecordID  Table1ID  Value
1   1         1         David
2   1         2         Tokyo
3   2         1         Scott
4   2         3         Manager

Table2 の Table1ID は、Table1 の ID にマップされます。ここで、Table1 プロパティ列の値を列ヘッダーとして表示し、次のような形式で結果を設定したいと考えています。

RecordID     Name    City    Designation
1            David   Tokyo   NULL
2            Scott   NULL    Manager

Table1 のレコード数 (つまり、結果セットの列) が変更される可能性があるため、動的に処理する必要があることを考慮して、 T-SQL でこれを達成するための最良/効率的な方法は何ですか?

PIVOT と CASE ベースのクエリを試しましたが、両方とも苦労しています。:(

ヘルプ/ガイダンスをいただければ幸いです。

ありがとう!

更新:
動的クエリを作成できましたが、まだ理解できないことの 1 つは、CASE ステートメントで MAX が使用されている理由です。私の初心者を無視してください。

4

1 に答える 1

3

使用する:

  SELECT t2.recordid,
         MAX(CASE WHEN t1.property = 'Name' THEN t2.value END) AS name,
         MAX(CASE WHEN t1.property = 'City' THEN t2.value END) AS city,
         MAX(CASE WHEN t1.property = 'Designation' THEN t2.value END) AS designation
    FROM TABLE2 t2
    JOIN TABLE1 t1 ON t1.id = t2.table1id
GROUP BY t2.recordid
ORDER BY t2.recordid
于 2010-08-25T04:06:56.967 に答える