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

哇我做到了!!

现在我明白了 PIVOT 是如何工作的。我尝试使用动态 SQL 一次旋转整个表,但无法将其放入 pivot 的语法中。旋转必须逐列 (PIVOT) 或逐行 (UNPIVOT) 将它们插入到临时表中以在最后获得完整的转置。

我认为这是适合我的方式..但也许它可以在单个查询中完成?(UNION ALL 无效,你知道 ;P)

第二天我会写出我找到的解决方案。

谢谢!

于 2010-08-13T12:45:31.867 回答
1

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

Pivot 不能做“动态”,所以你必须使用这个方法

于 2010-08-12T10:58:06.200 回答
0

这可以使用带有 anUNPIVOTPIVOT.

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 Fiddle

于 2012-08-09T15:23:20.953 回答