2

こんにちは、テーブル全体を回転させたいです:

LANGUAGE litAccept litDelete litErrorMsg  ..............
-------------------------------------------------
SPANISH  Accept    Delete    Error has ocurred
ENGLISH  Aceptar   Borrar    Ha ocurrido un error
.....

このようなものに:

LANGUAGE     ENGLISH   SPANISH
---------------------------------------
litAccept    Accept    Aceptar    
litDelete    Aceptar   Borrar    
litErrorMsg  Error..   Ha ocurridO..
...

PIVOT を使用するとテーブルを回転できることがわかりますが、誰がこれを行うのかわかりません!

助けてください、ありがとう

4

3 に答える 3

1

http://www.simple-talk.com/community/blogs/andras/archive/2007/09/14/37265.aspx

ピボットは「動的」を実行できないため、この方法を使用する必要があります

于 2010-08-12T10:58:06.200 に答える
1

うわーやったー!!

これでPIVOTの仕組みがわかりました。動的 SQL でテーブル全体を一度に回転させようとしましたが、pivot の構文には収まりません。ローテーションは、列ごと (PIVOT) または行ごと (UNPIVOT) に実行し、それらをテンポラル テーブルに挿入して、最後に完全な転置を取得する必要があります。

これが私のやり方だと思います..しかし、単一のクエリで実行できるのでしょうか?? (UNION ALL は有効ではありません。;P)

翌日、私が見つけた解決策を書きます。

ありがとう!

于 2010-08-13T12:45:31.867 に答える
0

これは、動的SQLとの両方を使用して完了することができUNPIVOTますPIVOT

DECLARE @colsUnPivot AS NVARCHAR(MAX),
    @colsPivot AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

SET @colsUnPivot = stuff((select ','+quotename(C.name)
         from sys.columns as C
         where C.object_id = object_id('t') and
               C.name like 'lit%'
         for xml path('')), 1, 1, '')

SET @colsPivot = STUFF((SELECT distinct ',' + QUOTENAME(c.Language) 
            FROM t c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 
            'SELECT * from 
            (
                select Language l1, type language, value
                from t
                unpivot
                (
                    value
                    for type in (' + @colsUnPivot + ')
                ) upvt
            ) x
            pivot 
            (
                min(value)
                for l1 in (' + @colsPivot + ')
            ) p '


execute(@query)

デモ付きのSQLフィドルを参照してください

于 2012-08-09T15:23:20.953 に答える