транспонировать стол - PullRequest
       28

транспонировать стол

2 голосов
/ 12 августа 2010

Привет, я хотел бы повернуть полную таблицу:

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 вы можете вращать таблицу, ноНе знаю, кто это делает!

Пожалуйста, помогите, спасибо

Ответы [ 3 ]

1 голос
/ 13 августа 2010

Ух ты, я это сделал !!

Теперь я понимаю, как работает PIVOT. Я попытался повернуть всю таблицу за один раз с помощью динамического SQL, и в синтаксис pivot никак не вписался. Поворот должен выполняться столбец за столбцом (PIVOT) или строка за строкой (UNPIVOT), вставляя их во временную таблицу, чтобы получить полную транспонирование в конце.

Я думаю, что это путь для меня .. но, может быть, это можно сделать в одном запросе? (СОЮЗ ВСЕ не действителен, вы знаете; P)

На следующий день я напишу найденное мной решение.

Спасибо!

1 голос
/ 12 августа 2010

http://www.simple -talk.com / сообщество / блоги / andras / archive / 2007/09/14 / 37265.aspx

Pivot не может работать в «динамическом» режиме, поэтому выпридется использовать этот метод

0 голосов
/ 09 августа 2012

Это может быть выполнено с использованием динамического 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 Fiddle с демоверсией

...