使用CASE语句名称作为另一个CASE语句中的另一个引用

时间:2017-04-18 15:26:26

标签: sql case case-statement qsqlquery

是否可以在SQL查询中的另一个case语句中引用另一个case语句名称?

示例:我有3个案例陈述。前两个语句是基于编码字段返回值。我的第三个案例陈述我想引用结束案例名称来返回数量的总和。

但是,我无法弄清楚如何让case语句引用我之前创建的案例名称。我希望我能正确解释这一点。

非常感谢任何帮助。有关详细信息,请参阅附图。

SELECT CI_ITEM.ITEMCODE
    , CI_ITEM.ITEMCODEDESC

    , CASE WHEN DATEDIFF("M",CI_ITEM.DATECREATED,GETDATE()) <60 THEN DATEDIFF("M",CI_ITEM.DATECREATED,GETDATE()) 
    ELSE 60 END AS NO_OF_MONTHS

    , CASE WHEN DATEDIFF("M",IM_ITEMTRANSACTIONHISTORY.TRANSACTIONDATE,GETDATE()) <=60 
    AND IM_ITEMTRANSACTIONHISTORY.TRANSACTIONCODE IN ('BI','II','SO','WI') 
    THEN IM_ITEMTRANSACTIONHISTORY.TRANSACTIONQTY *-1 ELSE '0' END AS QTY_CONSUMED_60_MONTHS

    , CASE WHEN NO_OF_MONTHS = 0 THEN 0 ELSE SUM([QTY_CONSUMED_60_MONTHS])/ [NO_OF_MONTHS] END AS MONTHLY_AVE_ON_60MONTHS_DATA

FROM CI_ITEM
INNER JOIN IM_ITEMTRANSACTIONHISTORY ON CI_ITEM.ITEMCODE = IM_ITEMTRANSACTIONHISTORY.ITEMCODE

enter image description here

1 个答案:

答案 0 :(得分:0)

只需将您的相关案例包装在子查询中,并将其作为子查询结果的字段引用。

SELECT
    *,
     CASE WHEN NO_OF_MONTHS = 0 THEN 0 ELSE SUM([QTY_CONSUMED_60_MONTHS])/ [NO_OF_MONTHS] END AS MONTHLY_AVE_ON_60MONTHS_DATA
FROM
(
    SELECT CI_ITEM.ITEMCODE
        , CI_ITEM.ITEMCODEDESC

        , CASE WHEN DATEDIFF("M",CI_ITEM.DATECREATED,GETDATE()) <60 THEN DATEDIFF("M",CI_ITEM.DATECREATED,GETDATE()) 
        ELSE 60 END AS NO_OF_MONTHS

        , CASE WHEN DATEDIFF("M",IM_ITEMTRANSACTIONHISTORY.TRANSACTIONDATE,GETDATE()) <=60 
        AND IM_ITEMTRANSACTIONHISTORY.TRANSACTIONCODE IN ('BI','II','SO','WI') 
        THEN IM_ITEMTRANSACTIONHISTORY.TRANSACTIONQTY *-1 ELSE '0' END AS QTY_CONSUMED_60_MONTHS

    FROM CI_ITEM
    INNER JOIN IM_ITEMTRANSACTIONHISTORY ON CI_ITEM.ITEMCODE = IM_ITEMTRANSACTIONHISTORY.ITEMCODE
)AS X