今日、同僚から、データを垂直ステージング テーブルから水平テーブルに変換するように依頼されました。つまり、行を列に変換します。PIVOTを使用して解決しました。しかし、データフィールドが繰り返されると、データを移動するのに問題が発生する状況になりました。
私が取り組んでいるテストデータは次のとおりです。
CREATE TABLE STAGING
(
ENTITYID INT,
PROPERTYNAME VARCHAR(25),
PROPERTYVALUE VARCHAR(25)
)
INSERT INTO STAGING VALUES (1, 'NAME', 'DONNA')
INSERT INTO STAGING VALUES (1, 'SPOUSE', 'HENRY')
INSERT INTO STAGING VALUES (1, 'CHILD', 'JACK')
INSERT INTO STAGING VALUES (2, 'CHILD', 'KAYALA')
PIVOT を使用して、行データを列として表示しました。
SELECT * FROM
(SELECT ENTITYID, PROPERTYNAME, PROPERTYVALUE FROM STAGING) AS T
PIVOT (MAX(PROPERTYVALUE) FOR PROPERTYNAME IN (NAME, SPOUSE, CHILD)) AS T2
出力は次のとおりです。
ENTITYID NAME SPOUSE CHILD
1 DONNA HENRY JACK
2 NULL NULL KAYALA
しかし、彼は次のような出力を望んでいました。
ENTITYID NAME SPOUSE CHILD CHILD
1 DONNA HENRY JACK KAYALA
つまり、ステージング テーブルには複数の CHILD 属性が含まれる可能性があります。これを考慮して、すべての CHILDREN を列に移動する必要があります。
これは可能ですか?