У меня есть два запроса, которые используют SUM()
с GROUP BY
. Каждый запрос должен возвращать одно и то же число или строки. В этом случае мой SQL в Sybase возвращает отдельные строки вместо одной строки. Вот мой запрос:
SELECT type_id, category_id, category_name, type_code, amount, awarded
FROM (
SELECT
type_id,
category_id,
category_name,
type_code,
CASE
WHEN category_id = 1 THEN SUM(amount)
WHEN category_id = 2 THEN SUM(amount)
WHEN category_id = 3 THEN SUM(amount)
WHEN category_id = 4 THEN SUM(amount)
END AS amount,
0 AS awarded
FROM Table 1
GROUP BY category_id, type_id, category_id, type_code
UNION
SELECT
null AS type_id,
ga.grant_category_id,
'' AS category_name,
null AS type_code,
0 AS amount,
CASE
WHEN t2.category_id = 1 THEN SUM(t2.awarded)
WHEN t2.category_id = 2 THEN SUM(t2.awarded)
WHEN t2.category_id = 3 THEN SUM(t2.awarded)
WHEN t2.category_id = 4 THEN SUM(t2.awarded)
END AS awarded
FROM Table2 t2
INNER JOIN Table3 t3
ON t2.rec_id = t3.rec_id
GROUP BY t2.category_id
) x
GROUP BY x.category_id
Результат запроса выглядит так:
type_id category_id category_name type_code amount awarded
1 2 TEST 2 REST 51804.00 0.00
1 4 TEST 4 REST 39398.00 0.00
1 3 TEST 3 REST 79922.00 0.00
1 1 TEST 1 REST 70927.00 0.00
null 1 null null 0.00 96013.00
null 2 null null 0.00 78759.00
null 3 null null 0.00 21436.00
null 4 null null 0.00 74602.00
Я бы хотел, чтобы результат выглядел так:
type_id category_id category_name type_code amount awarded
1 2 TEST 2 REST 51804.00 96013.00
1 4 TEST 4 REST 39398.00 78759.00
1 3 TEST 3 REST 79922.00 21436.00
1 1 TEST 1 REST 70927.00 74602.00
Как этого добиться? Спасибо.