2017-01-24 7 views
0

私は、誰かが正しい道で案内できることを願っています。それはSQLの私の最初のクラスです。和と差をつける

LICENSEID LICENSE BUSINESS_NAME YEAR TOTAL_AMOUT_PAID AMOUNT_OWNED 
1CA6918B 1000  CORTANA   2016 0.00    1000.00 
EE6DBDD0 1000  CORTANA   2017 1000.00   1000.00 

は基本的に、私はAMOUNT_OWNEDとTOTAL_AMOUNT_PAID間の差であるべき残高合計を計算するための別の列を追加したい:

SELECT distinct 
       a.LICENSEID, 
       a.license, 
       a.business_name, 
       a,year 
       a.TOTAL_AMOUNT_PAID, 
       SUM(e.COMPUTED_AMOUNT) over (partition by e.LICENSEID) as AMOUNT_OWNED, 
FROM vw_business AS a 
INNER JOIN vw_fees AS e ON e.LICENSEID = a.LICENSEID 
WHERE LICENSE = '1000' 
AND(e.STATUS='BILLED' OR e.STATUS='PAID') 

これは私にこのような結果が得られます。 SUMの後に次のように別の行を追加しようとしました。

(AMOUNT_OWNED - TOTAL_AMOUNT_PAID) AS TOTAL_BALANCED, 

ただし、TOTAL_BALANCEDが認識されないエラーが発生します。私はまた、運のないSUMの行全体を再び追加しようとしました。

あなたは正しい経路でガイドできますか?これが可能ならば。ありがとうございました。

答えて

2

Alias同じselectクエリで名前を参照することはできません。式が大きいときには、このよう

SELECT DISTINCT a.LICENSEID, 
       a.license, 
       a.business_name, 
       a.year, -- Here it is should be . instead of , 
       a.TOTAL_AMOUNT_PAID, 
       Sum(e.COMPUTED_AMOUNT)OVER (partition BY e.LICENSEID) AS AMOUNT_OWNED, 
       a.TOTAL_AMOUNT_PAID - Sum(e.COMPUTED_AMOUNT) 
             OVER (
              partition BY e.LICENSEID) AS TOTAL_BALANCED 
FROM vw_business AS a 
     INNER JOIN vw_fees AS e 
       ON e.LICENSEID = a.LICENSEID 
WHERE LICENSE = '1000' 
     AND e.STATUS IN ('BILLED', 'PAID') -- use IN clause 

または派生テーブルを使用してみてください違い

を見つけるために、再びsum over()ウィンドウ集合体を記述する必要が、これは良いオプションです。クエリは読みやすくなります

SELECT LICENSEID, 
     license, 
     business_name, 
     year, 
     TOTAL_AMOUNT_PAID, 
     AMOUNT_OWNED, 
     TOTAL_AMOUNT_PAID - AMOUNT_OWNED as TOTAL_BALANCED 
FROM (SELECT DISTINCT a.LICENSEID, 
         a.license, 
         a.business_name, 
         a.year,-- Here it is should be . instead of , 
         a.TOTAL_AMOUNT_PAID, 
         Sum(e.COMPUTED_AMOUNT)OVER (partition BY e.LICENSEID) AS AMOUNT_OWNED 
     FROM vw_business AS a 
       INNER JOIN vw_fees AS e 
         ON e.LICENSEID = a.LICENSEID 
     WHERE LICENSE = '1000' 
       AND e.STATUS IN ('BILLED', 'PAID') -- use IN clause 
     ) a 
+0

ありがとうございます。Prdp。 – sergio089

関連する問題