Как отфильтровать набор результатов сгруппированных запросов (SQL) - PullRequest
0 голосов
/ 12 марта 2011

Я сделал такой запрос:

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 ]

2 голосов
/ 12 марта 2011

Вы можете добавить условие, которое говорит: «Этот код должен иметь строку с 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 не будет в результатах первого запроса

1 голос
/ 12 марта 2011

Это должно сделать это:

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;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...