2017-04-27 39 views
0

我創建了一個SELECT這裏,我想「SUM」不同行,如果NIF是相等的其他NIF,合同是相同於其他和產品是100總和在選擇帶或IF SQL

SELECT 
NIF, 
CONTRACT, 
PRODUCT, 
SUM(SALDO) when PRODUCT=100 
DATE 
from TABLE_AAA 

然後我想轉換成圖表。

NIF  CONTRACT PRODUCT  SALDO DATE 
1  1001  100   1  27/04/2016 
1  1001  100   1  27/04/2016 
1  1003  100   2  27/04/2016 
1  1003  100   2  27/04/2016 
1  1001  102   1  27/04/2016 
2  1001  200   5  27/04/2016 
2  1001  200   1  27/04/2016 

NIF  CONTRACT PRODUCT  SALDO DATE 
1  1001  100   2  27/04/2016 
1  1003  100   4  27/04/2016 
1  1001  102   1  27/04/2016 
2  1001  200   5  27/04/2016 
2  1001  200   1  27/04/2016 
+1

添加一些樣本表數據和預期的資源ult - 以及格式化文本。 – jarlh

+0

不作爲評論,我們無法閱讀。編輯您的問題, – jarlh

回答

0

你想兩個查詢實際的結合:

  1. 產品100
  2. 集合行的其他產品

所以寫兩個查詢,並結合這兩個與不變紀錄UNION ALL

select nif, contract, product, sum(saldo) as saldo, max(date) as date 
from table_aaa 
where product = 100 
group by nif, contract, product 
union all 
select nif, contract, product, saldo, date 
from table_aaa 
where product <> 100 
order by nif, contract, product, date; 
+0

謝謝我會嘗試 –

0

您需要使用WHERE不是當,並且包括WHERE子句中的其他參數,還需要一個GROUP BY。沒有樣本數據和預期的輸出,這是我認爲你在追求的東西。

SELECT 
NIF, 
CONTRACT, 
PRODUCT, 
SUM(SALDO) AS SUMSALDO, 
DATE 
FROM TABLE_AAA 
WHERE PRODUCT = 100 
AND CONTRACT = NIF 
GROUP BY NIF, CONTRACT, PRODUCT, DATE 

好吧,也許你的意思是這樣的:

SELECT 
NIF, 
CONTRACT, 
PRODUCT, 
SUM(CASE WHEN PRODUCT = 100 AND CONTRACT = NIF THEN SALDO ELSE 0 END) AS SUMSALDO, 
DATE 
FROM TABLE_AAA 
GROUP BY NIF, CONTRACT, PRODUCT, DATE 
+0

@AleixCaminal添加第二個答案 – Matt

0

這是SQL的SUM函數。 SELECT SUM(column_name)FROM table_name;

在你的情況,

SELECT NIF, CONTRACT, PRODUCT, SUM(SALDO) FROM Table_AAA WHERE PRODUCT = 100 AND NIF = CONTRACT; 

我認爲這將有助於。

0

如果你想總結,行滿足相同的條件,你有不止一個條件,我想你可以以下查詢:

SELECT 
NIF, 
CONTRACT, 
PRODUCT, 
SUM(case when NIF=CONTRACT AND PRODUCT=100 THEN SALDO ELSE 0 END) SUM_PROD_100 , 
"DATE" 
from TABLE_AAA 
GROUP BY NIF, CONTRACT,PRODUCT, "DATE" 

您可以使用與「SUM_PROD_100」列中相同的邏輯對其他滿足不同條件的行進行求和。