-1

値は次のとおりです。

id      |   cat    |    AttribGroup  |  AttribID   |   Value
1            1           test             001          beautiful
1            1           test             002          handsome

今、私がしたいことは次のとおりです。

id      |   cat    |    test_001     |  test_002  
1            1         beautiful        handsome
4

1 に答える 1

2

あなたはこのフィドルをチェックすることができます

PIVOT で構成され、結果を最初のテーブルに結合します。

あなたの値はtest_001とtest_002だけではないと思うので、列を定義するために動的SQLが必要になります。

コード :

DECLARE @cols AS VARCHAR(MAX),
        @query AS VARCHAR(MAX)

SET @cols = STUFF((SELECT distinct ',[' + AttribGroup + '_' + AttribID +']'
            FROM Table1 c
            FOR XML PATH(''), TYPE
            ).value('.', 'VARCHAR(MAX)') 
        ,1,1,'')


SET @query = 
';WITH MyCTE AS
(
    SELECT    * 
    FROM 
    (
        SELECT    AttribGroup + ''_'' + AttribID  AS ColName, 
                  CONVERT(VARCHAR,id)+''_''+CONVERT(VARCHAR,cat) AS idcat, 
                  Value
        FROM      Table1
    ) p
    PIVOT 
    (
        MAX    (Value)
        FOR    ColName IN (' + @cols + ')
    )   AS pvt
)

SELECT    t.id,
          t.cat,
          m.* 
FROM      MyCTE m
          JOIN 
          (
              SELECT    id,
                        cat,
                        CONVERT(VARCHAR,id)+''_''+CONVERT(VARCHAR,cat) as idcat
              FROM      Table1
              GROUP BY  id,
                        cat
          ) t
              ON m.idcat = t.idcat'


EXEC(@query)
于 2013-08-27T11:53:29.340 に答える