2016-09-06 3 views
0

次のコードを使用していますが、前のケースのSUMからSUM Total_Bank_AmountProg_VarianceをSUMとみなしています。select文で作成されたSUM列に対して、selectで指定された列を使用しようとしています

SELECT 
    b.Date, 
    SUM(p.Prog_Amount) AS Prog_Amount, 
    SUM(o.Credit_Amt) AS Outstanding, 
    CASE 
     WHEN b.Bank_Name Like '%Corp%' 
      THEN SUM(b.Credit_Amt) 
    END AS TMP_Amount, 
    CASE 
     WHEN b.Bank_Name Like '%Cleo%' 
      THEN SUM(b.Credit_Amt) 
    END AS Cleo_Amount, 
    CASE 
     WHEN b.Bank_Name Like '%NY Bank%' 
      THEN SUM(b.Credit_Amt) 
    END AS NY_Amount, 
    CASE 
     WHEN b.Bank_Name Like '%MA%' 
      THEN SUM(b.Credit_Amt) 
    END AS MA_Amount, 
    CASE 
     WHEN b.Bank_Name Like '%CT%' 
      THEN SUM(b.Credit_Amt) 
    END AS CT_Amount, 
    CASE 
     WHEN b.Bank_Name Like '%NY_SS%' 
      THEN SUM(b.Credit_Amt) 
    END AS NY_SS_Amount, 
    CASE 
     WHEN b.Bank_Name LIKE '%VC_SS%' 
      THEN SUM(b.Credit_Amt) 
    END AS VC_SS_Amount, 
    (TMP_Amount + Cleo_Amount + NY_Amount + MA_Amount + CT_Amount + NY_SS_Amount + VC_SS_Amount) AS Total_Bank_Amount, 
    (Prog_Amount + Outstanding - TMP_Amount - Cleo_Amount - NY_Amount - MA_Amount - CT_Amount - NY_SS_Amount - VC_SS_Amount) AS Prog_Variance 
FROM 
    vw_Prog_Reference_Summary p 
RIGHT JOIN 
    Bank_Detail b ON p.Bank_Reference_Number = b.Bank_Reference 
LEFT JOIN 
    vw_Outstanding_Form o ON b.Bank_Reference = o.Bank_Reference 
LEFT JOIN 
    Exclusion e ON b.Bank_Reference = e.Exclude 
WHERE 
    e.Exclude IS NULL 
GROUP BY 
    b.Bank_Name, b.Date 

問題は解析時に作成されないので、どのように回避するのですか?研究は私が何も=(を考え出すているおかげ

答えて

1

残念ながら、あなたは同じselect文の中に列の別名を参照することはできません。通常、このための回避策は、あなたのコアのクエリサブクエリを作成し、その後、カラムのエイリアスを参照することですか、繰り返すことができます同じ論理を計算に再入力します(したがって、それらのcase文とsum文を集計計算に再度追加します)。

参照のためのリンクの下に

これは前に頼まれているので:私はあなたが条件付きの集約を探していると思う Reference an alias elsewhere in the SELECT list

+0

で働いていました。私はまだそれを把握することができませんでしたいくつかの理由の元のリンクが、私は少しもっと見ることをやったとちょっとちょっと良いレイアウトの同じタイプを見つけた私は推測する:[リンク](http://stackoverflow.com/質問/ 11182339/reference-alias-in-select-where-clause) – KRM

0

はこのような何か試してみてください:。。

SELECT 
    (TMP_Amount + Cleo_Amount + NY_Amount + MA_Amount + CT_Amount + NY_SS_Amount + VC_SS_Amount) AS Total_Bank_Amount, 
    (Prog_Amount + Outstanding - TMP_Amount - Cleo_Amount - NY_Amount - MA_Amount - CT_Amount - NY_SS_Amount - VC_SS_Amount) AS Prog_Variance 
FROM (
    SELECT b.Date, Sum(p.Prog_Amount) AS Prog_Amount, Sum(o.Credit_Amt) AS Outstanding, 
     CASE WHEN b.Bank_Name Like '%Corp%' THEN SUM(b.Credit_Amt) END AS TMP_Amount, 
     CASE WHEN b.Bank_Name Like '%Cleo%' THEN SUM(b.Credit_Amt) END AS Cleo_Amount, 
     CASE WHEN b.Bank_Name Like '%NY Bank%' THEN SUM(b.Credit_Amt)END AS NY_Amount, 
     CASE WHEN b.Bank_Name Like '%MA%' THEN SUM(b.Credit_Amt) END AS MA_Amount, 
     CASE WHEN b.Bank_Name Like '%CT%' THEN SUM(b.Credit_Amt) END AS CT_Amount, 
     CASE WHEN b.Bank_Name Like '%NY_SS%' THEN SUM(b.Credit_Amt)END AS NY_SS_Amount, 
     CASE WHEN b.Bank_Name Like '%VC_SS%' THEN SUM(b.Credit_Amt)END AS VC_SS_Amount 
    FROM vw_Prog_Reference_Summary p 
     RIGHT JOIN Bank_Detail b ON p.Bank_Reference_Number = b.Bank_Reference 
     LEFT JOIN vw_Outstanding_Form o ON b.Bank_Reference = o.Bank_Reference 
     LEFT JOIN Exclusion e ON b.Bank_Reference = e.Exclude 
    WHERE e.Exclude Is Null 
    GROUP BY b.Bank_Name, b.Date 
) t 

を必要な値が利用可能になるように、私は、サブクエリに古いクエリを移動し、私も移動しました。 Total_Bank_Amountと外Prog_Varianceための総和。

0

SELECT b.Date, Sum(p.Prog_Amount) AS Prog_Amount, Sum(o.Credit_Amt) AS Outstanding, 
     SUM(CASE WHEN b.Bank_Name Like '%Corp%' THEN b.Credit_Amt END) AS TMP_Amount, 
     . . . 
FROM . . . 
GROUP BY b.Date; 

つまり、あなたがSUM()の引数としてCASEをしたいです、 その逆ではありません。

これは実際には、銀行ごとに別々の行ではなく集計された情報のみを必要とすることを前提としています。

+0

これはまた私が全体のケースを合計するために探していた良いキャッチでした。私はそれを使ってコードを更新しました。 – KRM

0

Rollup, Cube and Grouping Setsを読んでください。これにより、同じ選択項目の合計が得られます(必要な場合)。ただし、NULL値を考慮する必要があります。

代わりに、あなたはこのようなWITHUNIONを使用することができます。Zi0n1This @

With SummaryData As 
(
    SELECT 
     b.Date, Sum(p.Prog_Amount) AS Prog_Amount, Sum(o.Credit_Amt) AS Outstanding, 
     CASE WHEN b.Bank_Name Like '%Corp%' THEN SUM(b.Credit_Amt) END AS TMP_Amount, 
     CASE WHEN b.Bank_Name Like '%Cleo%' THEN SUM(b.Credit_Amt) END AS Cleo_Amount, 
     CASE WHEN b.Bank_Name Like '%NY Bank%' THEN SUM(b.Credit_Amt)END AS NY_Amount, 
     CASE WHEN b.Bank_Name Like '%MA%' THEN SUM(b.Credit_Amt) END AS MA_Amount, 
     CASE WHEN b.Bank_Name Like '%CT%' THEN SUM(b.Credit_Amt) END AS CT_Amount, 
     CASE WHEN b.Bank_Name Like '%NY_SS%' THEN SUM(b.Credit_Amt)END AS NY_SS_Amount, 
     CASE WHEN b.Bank_Name Like '%VC_SS%' THEN SUM(b.Credit_Amt)END AS VC_SS_Amount, 
     (TMP_Amount + Cleo_Amount + NY_Amount + MA_Amount + CT_Amount + NY_SS_Amount + VC_SS_Amount) AS Total_Bank_Amount, 
     (Prog_Amount + Outstanding - TMP_Amount - Cleo_Amount - NY_Amount - MA_Amount - CT_Amount - NY_SS_Amount - VC_SS_Amount) AS Prog_Variance 
    FROM vw_Prog_Reference_Summary p 
    RIGHT JOIN Bank_Detail b 
     ON p.Bank_Reference_Number = b.Bank_Reference 
    LEFT JOIN vw_Outstanding_Form o 
     ON b.Bank_Reference = o.Bank_Reference 
    LEFT JOIN Exclusion e 
     ON b.Bank_Reference = e.Exclude 
    WHERE e.Exclude Is Null 
    GROUP BY b.Bank_Name, b.Date 
) 

Select * 
From SummaryData 

Union All 

SELECT 
    Date, 
    0 Prog_Amount, 
    0 Outstanding, 
    0 TMP_Amount, 
    0 Cleo_Amount, 
    0 NY_Amount, 
    0 MA_Amount, 
    0 CT_Amount, 
    0 NY_SS_Amount, 
    0 VC_SS_Amount, 
    Sum (Total_Bank_Amount) Total_Bank_Amount, 
    Sum (Prog_Variance) Prog_Variance 
FROM SummaryData 
Group By 
    Date 
+0

これは私の現在のスクリプトと同じ問題をもたらしました。 Zi0n1には正しいルートがあります。 – KRM

関連する問題