我创建了以下查询:
SELECT UnPivotTable.*
FROM ( SELECT
"Stage 1" as "Stage 1 Date",
"Stage 2" as "Stage 2 Date",
"Stage 3" as "Stage 3 Date",
"Stage 4" as "Stage 4 Date",
"Proposal Number",
"Amount"
FROM "Proposals"
) AS Temp
unpivot
("Proposals" FOR "Stage" IN ( Temp."Stage 1 Date" , Temp."Stage 2 Date" , Temp."Stage 3 Date" , Temp."Stage 4 Date" )
) AS UnPivotTable
作为查询本身效果很好。到目前为止一切顺利
这工作正常,但我需要金额字段根据阶段而变化。因此,如果阶段是“阶段 1”,则金额应为金额 *0.1,“阶段 2”的金额应为金额 * 0.3,“阶段 3”的金额应为金额 * 0.4,“阶段 4”的金额应为金额 * 0.4为金额 * 0.2。
我不太明白在这个 SQL 语句中执行此操作的方法。我想我可以以某种方式使用辅助表,但最好将所有这些都保留在单个 SQL 语句中
通常情况下,当事情变得中等复杂时,
PIVOT
和UNPIVOT
就会崩溃。
您最好使用
CROSS APPLY (VALUES
进行手动取消旋转
SELECT
p.[Proposal Number],
v.Amount,
v.Stage,
v.Proposal
FROM Proposals p
CROSS APPLY (VALUES
('Stage 1 Date', p.[Stage 1], p.Amount * 0.1),
('Stage 2 Date', p.[Stage 2], p.Amount * 0.3),
('Stage 3 Date', p.[Stage 3], p.Amount * 0.4),
('Stage 4 Date', p.[Stage 4], p.Amount * 0.2)
) v(Stage, Proposals, Amount);
帮自己一个忙,为不需要引用的列命名。