簡體   English   中英

如何篩選分組查詢結果集(SQL)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM