嗨,我想旋转一张完整的表格:
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 :(得分:1)
http://www.simple-talk.com/community/blogs/andras/archive/2007/09/14/37265.aspx
Pivot不能做'动态'所以你必须使用这个方法
答案 1 :(得分:1)
现在我明白了PIVOT是如何运作的。我尝试使用动态SQL一次旋转整个表,并且无法将其放入pivot的语法中。旋转必须逐列(PIVOT)或逐行(UNPIVOT)将它们插入临时表中,以便在结尾处进行完整的移调。
我认为这是我的方式..但也许它可以在单个查询中完成? (UNION ALL无效,你知道; P)
第二天,我将编写我找到的解决方案。
谢谢!
答案 2 :(得分: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)