2017-04-18 10 views
0

SQLクエリ内の別のcase文で別のcase文の名前を参照することはできますか?CASE文の名前を他のCASE文の別の参照として使用する

例:3つのケースステートメントがあります。最初の2つの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

定義されている「SELECT」の列エイリアスを参照することはできません。サブクエリを使用する必要があります。または、CTE。使用しているデータベースで質問にタグを付けます。 –

+2

タイトルにALL CAPSを使用しないでください。叫ぶのと同等とみなされます – jmoerdyk

+0

「同じ」選択で試していることができない理由は、SELECT値が同時に生成されるためです。したがって、最後のケースが生成されている時点では、以前のケースについての知識はありません。これは本当かもしれません。これはいくつかの例外があるかもしれませんが、選択の順序は問題ありませんが、MS-Accessの場合はそうではないと私は信じています。 – xQbert

答えて

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 
+0

これは完璧でした!ありがとう、ロス! – Neisha