【发布时间】:2019-03-26 01:05:49
【问题描述】:
我试图创建一个 Common Table Express(CTE) 来存储我需要的一些数据,这些数据需要一堆内部连接。然后,我想使用动态透视列对结果进行透视。我在下面写了查询,但我收到了错误
“已定义但未使用的公用表表达式。”
如何基于 CTE 创建数据透视查询?顺便说一句,我可以不使用 CTE,但我想知道是否可以使用 CTE。
DECLARE @cols nvarchar(max)
DECLARE @sql nvarchar(max)
SELECT @cols = isnull(@cols + ', ', '') + '[' + Convert(varchar(max),T.CostCenterNumber) + ']' FROM (SELECT distinct CostCenterNumber FROM CostCenters) as T
;With PivotData as (
SELECT B.[Year], C.CostCenterNumber, C.CostCenterName, E.[Description] as GLClass, D.Code, D.[GLDescription], A.Total
From GeneralLedgers A inner join
Years B on A.YearID = B.ID
inner join CostCenters C on
A.CostCenterID = C.ID
inner join GLCodes D on
A.GLCodeID = D.ID inner join
GLClassificationTypes E on
D.GLClassificationTypeID = E.ID)
SELECT @sql = '
Select *
From(
SELECT [Year], CostCenterNumber, GLClass, Code, GLDescription, Total
FROM PivotData) as T
PIVOT
(
Max(Total)
for [CostCenterNumber] in (' + @cols + ')
)) as P'
EXEC(@sql)
【问题讨论】:
标签: sql sql-server tsql