【问题标题】:Using same calculation for different SQL Aliases对不同的 SQL 别名使用相同的计算
【发布时间】:2013-03-28 10:31:30
【问题描述】:

所以我有两个使用相同计算的列别名:

,case when bi.PolicyFeeFactor = 0 then 0 else CAST(ROUND(nb.AnnualPolicyFee * bi.PolicyFeeFactor,2)AS DECIMAL(6,2)) end as UNIT_POLFEE_Y

,case when bi.PolicyFeeFactor = 0 then 0 else CAST(ROUND(nb.AnnualPolicyFee * bi.PolicyFeeFactor,2)AS DECIMAL(6,2)) end as UNIT_PUPFEE_Y

我正在寻找一种方法,我可以只编写一次计算并从该语句创建两个列别名,例如:

,case when bi.PolicyFeeFactor = 0 then 0 else CAST(ROUND(nb.AnnualPolicyFee * bi.PolicyFeeFactor,2)AS DECIMAL(6,2)) end as UNIT_PUPFEE_Y, UNIT_POLFEE_Y

【问题讨论】:

    标签: sql alias


    【解决方案1】:

    将其包装在子查询中,例如

    SELECT Result AS UNIT_PUPFEE_Y, 
           Result AS UNIT_POLFEE_Y
    FROM
        (
            SELECT CASE .... END AS Result
            FROM   tableName
        ) s
    

    【讨论】:

    • 这在我只从子查询中选择一个表达式时有效,但是当我同时选择两个表达式时出现错误:Only one expression can be specified in the select list when the subquery is not introduced with EXISTS
    • 您是否执行了上面给出的相同查询?
    【解决方案2】:

    你可以这样写,

    SELECT *,UNIT_PULFEE_Y AS UNIT_PUPFEE_Y FROM
    (SELECT *
    ,case when bi.PolicyFeeFactor = 0 then 0 else CAST(ROUND(nb.AnnualPolicyFee *              bi.PolicyFeeFactor,2)AS DECIMAL(6,2)) end as UNIT_PULFEE_Y
    FROM Table )A
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2019-03-11
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      • 2013-08-14
      • 2021-08-24
      • 1970-01-01
      相关资源
      最近更新 更多