2

今日、同僚から、データを垂直ステージング テーブルから水平テーブルに変換するように依頼されました。つまり、行を列に変換します。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 を列に移動する必要があります。

これは可能ですか?

4

2 に答える 2

0

エンティティIDを表示する必要がない場合は、質問を正しく見てください。出力が必要です:-

ENTITYID    NAME    SPOUSE  CHILD   CHILD
1           DONNA   HENRY   JACK    KAYALA(This one is entityId=2)

間違っているので、次のような結果が必要な場合でも:

  NAME    SPOUSE  CHILD   CHILD
  DONNA   HENRY   JACK    KAYALA

SELECT * FROM  (SELECT  PROPERTYNAME, PROPERTYVALUE FROM STAGING) AS T PIVOT (MAX(PROPERTYVALUE) FOR PROPERTYNAME IN (NAME, SPOUSE, CHILD)) AS T2
于 2014-08-04T07:08:17.743 に答える