带有附加变量字段创建的 SQL Unpivot

问题描述 投票:0回答:1

我创建了以下查询:

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 语句中

sql unpivot zoho
1个回答
0
投票

通常情况下,当事情变得中等复杂时,

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);

帮自己一个忙,为不需要引用的列命名。

© www.soinside.com 2019 - 2024. All rights reserved.