2011-03-12 95 views
0

我做這樣的查詢:在數據庫表如何篩選分組查詢結果集(SQL)

 
SELECT Code, 
     kind, 
     SUM(valP) AS value 
FROM transaction 
WHERE tp = 'N' and date = '20110312' 
GROUP BY Code,kind ORDER BY Code,kind; 

,讓我這個結果集:

+------+------+------+ 
| Code | kind| value| 
+------+------+------+ 
| 1 | TR | 25,99| 
| 1 | CT | 22,17| 
| 2 | TR | 14,23| 
| 3 | DD | 09,67| 
| 3 | DD | 23,87| 
| 3 | CT | 34,87| 
+------+------+------+ 

代碼代表交易代碼,種類代表付款類型,價值代表付款的價值。

我想在結果集中包含僅包含類型='CT'的分組結果,但我想在同一個事務中包含其他支付類型,例如我嘗試添加一個有到上查詢:

 
SELECT Code, 
     kind, 
     SUM(valP) AS value 
FROM transaction 
WHERE tp = 'N' and date = '20110312' 
GROUP BY Code,kind HAVING kind = 'CT' 
ORDER BY Code,kind; 

,但我得到這樣的:

+------+------+------+ 
| Code | kind| value| 
+------+------+------+ 
| 1 | CT | 22,17| 
| 3 | CT | 34,87| 
+------+------+------+ 

,而不是我想要檢索是這樣的:

+------+------+------+ 
| Code | kind| value| 
+------+------+------+ 
| 1 | TR | 25,99| 
| 1 | CT | 22,17| 
| 3 | DD | 09,67| 
| 3 | DD | 23,87| 
| 3 | CT | 34,87| 
+------+------+------+ 

CT類型的記錄中的所有事務處理線有沒有辦法獲取?

我該怎麼辦?

我實際上在SQL Server 2005上工作,但我可能需要在PostgreSQL中運行一個類似的查詢。

感謝

回答

2

您可以添加條件,表明「此代碼必須與CT行」 SA做一個子查詢:

SELECT Code FROM transaction WHERE kind='CT' GROUP BY Code ; 

和你的第一個查詢添加過濾器只顯示那些具有代碼在前面的子查詢記錄:

... AND Code IN (SELECT Code FROM transaction WHERE kind='CT' GROUP BY Code) ... 

這將擺脫記錄編號2,因爲2不會在結果從第一次查詢

1

這應該這樣做:

 
SELECT Code, 
     kind, 
     SUM(valP) AS value 
FROM transaction 
WHERE tp = 'N' 
    AND date = '20110312' 
    AND code IN (SELECT t2.code 
       FROM transaction t2 
       WHERE t2.kind = 'CT') 
GROUP BY Code,kind 
ORDER BY Code,kind;