【发布时间】:2013-04-29 16:18:53
【问题描述】:
我有这个 unpivot 表,我希望删除应用于它的过滤器。
DECLARE @colsPivot AS NVARCHAR(MAX),
@colsUnpivot as NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @colsPivot = STUFF((SELECT distinct ',' + QUOTENAME(year(EcoDate))
from PhdRpt.RptCaseEco
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
select @colsUnpivot = stuff((select ','+quotename(C.name)
from sys.columns as C
where C.object_id = object_id('PhdRpt.RptCaseEco')
and C.name Like 'Net%'
for xml path('')), 1, 1, '')
set @query
= 'select *
from
(
select reportruncaseid, year(Ecodate) as EcoYear, val, col
from phdrpt.rptcaseeco
unpivot
(
val
for col in ('+ @colsUnpivot +')
) u
) x1
pivot
(
max(val)
for ecoyear in ('+ @colspivot +')
) p ORDER BY reportruncaseid'
exec(@query)
此表以前有效,因为所有列的前缀都是“Net”,但现在还有其他列被过滤掉,因为它们不以“Net”开头。我试图删除 --- 和 C.name Like 'Net%' --- 但我不断收到这些错误:
Msg 8167, Level 16, State 1, Line 10
The type of column "EcoDate" conflicts with the type of other columns specified in the UNPIVOT list.
Msg 207, Level 16, State 1, Line 4
Invalid column name 'reportruncaseid'.
Msg 207, Level 16, State 1, Line 4
Invalid column name 'Ecodate'.
这是表格的样子
【问题讨论】:
-
您要反透视的表的表结构是什么?当您应用 unpivot 时,数据类型必须相同,因此您可能需要在 unpivot 之前应用强制转换,但您需要提供更多详细信息。
-
我正在旋转 EcoDate 并动态地取消旋转其余列。我们不会提前知道列数或生态数据的数量。
标签: sql sql-server-2008 pivot pivot-table unpivot