2017-01-24 42 views
0

我希望有人能以正確的方式引導。這是我在SQL中的第一堂課。做一筆總和與差

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') 

這會給我這樣一個結果:

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之間的差異。我嘗試添加另一行SUM後是這樣的:

(AMOUNT_OWNED - TOTAL_AMOUNT_PAID) AS TOTAL_BALANCED, 

不過,我得到的是不承認TOTAL_BALANCED錯誤。我也嘗試再次添加SUM的整個行,但沒有運氣。

您能指導正確的路徑嗎?如果這是可能的。謝謝。

回答

2

Alias名稱不能在相同的select查詢中提及。你需要重新編寫sum over()窗口集合找到差異

嘗試這種方式

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 

或使用派生表,這是一個更好的選擇時,表達的是大的。查詢將更具可讀性

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