【问题标题】:Referencing multiple aliases in a new field [duplicate]在新字段中引用多个别名[重复]
【发布时间】:2022-11-10 01:57:58
【问题描述】:

我正在计算 3 个新字段,其中计算 #2 取决于计算 #1,计算 #2 取决于计算 #3。

我想为这些计算设置别名以创建更简洁的解决方案,但我不确定如何引用多个别名。如果我只有 2 次计算,我知道我可以创建一个子查询并在上层引用我的别名。但是,我不确定如何通过 3 次计算来做到这一点。我会加入子查询吗?

下面的表示(当前代码在尝试在别名中引用别名时会遇到错误。)

DECLARE @myTable AS TABLE([state] VARCHAR(20), [season] VARCHAR(20), [rain] int, [snow] int, [ice] int)
INSERT INTO @myTable VALUES ('AL', 'summer', 1, 1, 1)
INSERT INTO @myTable VALUES ('AK', 'summer', 3, 3, 1)
INSERT INTO @myTable VALUES ('AZ', 'summer', 0, 1, 1)
INSERT INTO @myTable VALUES ('AL', 'winter', 5, 4, 2)
INSERT INTO @myTable VALUES ('AK', 'winter', 2, 2, 2)
INSERT INTO @myTable VALUES ('AZ', 'winter', 1, 1, 2)
INSERT INTO @myTable VALUES ('AL', 'summer', 6, 4, 3)
INSERT INTO @myTable VALUES ('AK', 'summer', 3, 0, 3)
INSERT INTO @myTable VALUES ('AZ', 'summer', 5, 1, 3)

select *,
       ice + snow as cold_precipitation,
       rain as warm_precipitation, 
       cold_precipitation + warm_precipitation as overall_precipitation,
       cold_precipitation / sum(overall_precipitation) as cold_pct_of_total,
       warm_precipitation / sum(overall_precipitation) as warm_pct_of_total
from @myTable

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    您可以使用CROSS APPLY(s) 来堆叠表达式和引用别名。但是,您有一个聚合 sum() 而没有 GROUP BY,因此您想要的结果并不明确。

    我确实将您的 sum() 更改为窗口函数 sum() over(partition by state,season)

    例子

    select A.*,
           cold_precipitation,
           warm_precipitation, 
           overall_precipitation,
           cold_precipitation / sum(overall_precipitation+0.0) over(partition by state,season) as cold_pct_of_total,
           warm_precipitation / sum(overall_precipitation+0.0) over(partition by state,season) as warm_pct_of_total
    from @myTable A
    Cross Apply ( values ( ice + snow , rain ) ) B(cold_precipitation,warm_precipitation)
    Cross Apply ( values ( cold_precipitation+warm_precipitation )) C(overall_precipitation)
    

    结果

    【讨论】:

      猜你喜欢
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多