我对sql很新,我有一个SQL查询,如下所示
SELECT ColumnTitle AS Months,
(SELECT CellContent
FROM Workflow_CustomFormColumnsData AS CD
WHERE (CustomFormColumnId = CC.Id) AND (RowNumber = 1)) AS Planned,
(SELECT SUM(CAST(CellContent AS INT)) AS Expr1
FROM Workflow_CustomFormColumnsData AS CD
WHERE (CustomFormColumnId IN
(SELECT Id
FROM Workflow_CustomFormColumns AS FAKE
WHERE (Id <= CC.Id) AND (CustomFormId = @CustomForm) AND (ColumnNumber <> 1))) AND (RowNumber = 1)) AS SUMPlanned,
(SELECT CellContent
FROM Workflow_CustomFormColumnsData AS CD
WHERE (CustomFormColumnId = CC.Id) AND (RowNumber = 2)) AS Actual,
(SELECT SUM(CAST(CellContent AS INT)) AS Expr1
FROM Workflow_CustomFormColumnsData AS CD
WHERE (CustomFormColumnId IN
(SELECT Id
FROM Workflow_CustomFormColumns AS FAKE
WHERE (Id <= CC.Id) AND (CustomFormId = @CustomForm) AND (ColumnNumber <> 1))) AND (RowNumber = 2)) AS SUMActual
FROM Workflow_CustomFormColumns AS CC
WHERE (CustomFormId = @CustomForm) AND (ColumnNumber <> 1)
The above code returns values as in the following manner.
Months Planned SumPlanned Actual SumActual
Jan 0 0 50 50
Feb 10 10 25 75
Mar 15 25 10 85
现在我需要在现有查询中添加一个数据透视表来转换输出,如下所示
Jan Feb March
Planned 0 10 15
SumPlanned 0 10 25
Actual 50 25 10
SumActual 50 75 85
谢谢!
答案 0 :(得分:0)
尝试此查询:
;with
table1 as
(SELECT ColumnTitle AS Months,
(SELECT CellContent
FROM Workflow_CustomFormColumnsData AS CD
WHERE (CustomFormColumnId = CC.Id) AND (RowNumber = 1)) AS Planned,
(SELECT SUM(CAST(CellContent AS INT)) AS Expr1
FROM Workflow_CustomFormColumnsData AS CD
WHERE (CustomFormColumnId IN
(SELECT Id
FROM Workflow_CustomFormColumns AS FAKE
WHERE (Id <= CC.Id) AND (CustomFormId = @CustomForm) AND (ColumnNumber <> 1))) AND (RowNumber = 1)) AS SUMPlanned,
(SELECT CellContent
FROM Workflow_CustomFormColumnsData AS CD
WHERE (CustomFormColumnId = CC.Id) AND (RowNumber = 2)) AS Actual,
(SELECT SUM(CAST(CellContent AS INT)) AS Expr1
FROM Workflow_CustomFormColumnsData AS CD
WHERE (CustomFormColumnId IN
(SELECT Id
FROM Workflow_CustomFormColumns AS FAKE
WHERE (Id <= CC.Id) AND (CustomFormId = @CustomForm) AND (ColumnNumber <> 1))) AND (RowNumber = 2)) AS SUMActual
FROM Workflow_CustomFormColumns AS CC
WHERE (CustomFormId = @CustomForm) AND (ColumnNumber <> 1)),
tab1 as
(SELECT 'Planned' col,Jan,Feb,Mar
FROM
(SELECT Months,Planned
FROM table1) p
PIVOT
(MAX(Planned)
FOR Months IN
(Jan,Feb,Mar)
)AS pvt),
tab2 as
(SELECT 'SumPlanned' col,Jan,Feb,Mar
FROM
(SELECT Months,SumPlanned--,Actual,SumActual
FROM table1) p
PIVOT
(MAX(SumPlanned)
FOR Months IN
(Jan,Feb,Mar)
)AS pvt),
tab3 as
(SELECT 'Actual' col,Jan,Feb,Mar
FROM
(SELECT Months,Actual--,SumActual
FROM table1) p
PIVOT
(MAX(Actual)
FOR Months IN
(Jan,Feb,Mar)
)AS pvt),
tab4 as
(SELECT 'SumActual' col,Jan,Feb,Mar
FROM
(SELECT Months,SumActual
FROM table1) p
PIVOT
(MAX(SumActual)
FOR Months IN
(Jan,Feb,Mar)
)AS pvt)
select * from tab1
union all
select * from tab2
union all
select * from tab3
union all
select * from tab4;