[英]How to query if just one record of a grouped result set satisfies a condition?
[英]How to Filter grouped query result set (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'的分組結果,但是我想在同一筆交易中也包括其他付款類型,例如,我嘗試通過在上面的查詢中添加一個hading :
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中運行類似的查詢。
謝謝
您可以添加條件來告訴“此代碼必須在CT中包含一行”,然后執行子查詢:
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
應該這樣做:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.