Как фильтровать по одному и тому же столбцу дважды в SQL?
Скажем, у меня есть столбец с датами, категориями и значениями для суммирования. Я хочу сгруппировать по категориям и суммировать по значениям так, чтобы оно удовлетворяло определенному условию для определенного набора дат и другому условию для другого набора дат.
Что-то вроде:
SELECT categories, SUM(values)
FROM table
group by categories
having SUM(values) = 0 WHEN dates between w AND x
AND having SUM(values) > 10000 WHEN dates between y and z
Спасибо!
2 ответа
Решение
Я думаю, что вы хотите условную агрегацию:
select categories, sum(values)
from table
group by categories
having sum(case when dates between w and x then values else 0 end) = 0 and
sum(case when dates between y and z then values else 0 end) > 10000 ;
Вы можете сделать следующее (SUM
только значения, которые уважают условие в IIF
пункт):
SELECT categories, SUM(values)
FROM table
GROUP BY categories
HAVING SUM(IIF(dates BETWEEN w AND x, values, 0)) = 0
AND SUM(IIF(dates BETWEEN y AND z, values, 0)) > 10000