2010-08-12 2 views
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 вы можете вращать стол, но я не знаете, кто это делает!

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

+0

вы смотрели на SQL Server Books Online? –

+0

Pivot не делает это напрямую. Возможно, вы могли бы использовать 'unpivot' сначала, затем попытаться использовать' pivot', чтобы вернуть его в любом формате. Я немного смущен данными, которые вы принимаете '' '' '' '' '' 'в строке' SPANISH', чтобы начать с (что кажется неправильным для начала). Затем в преобразованной версии «Удалить» полностью исчезло. –

+0

Да, это ошибка! Замените «Aceptar» во второй строке «Delete». – Diego

ответ

1

Wow Я сделал это !!

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

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

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

Спасибо!

+0

. Вы должны иметь возможность использовать сводные и невинные объекты в одном запросе, а не создавать временную таблицу, в результате чего выходное значение univot становится входным для оси. –

+0

Как вы можете это сделать, если число строк и столбцов динамическое? – Diego

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 Fiddle with a Demo