Я упростил приведенные ниже примеры, однако, пожалуйста, знайте, что мне действительно нужны результаты, которые я описываю.
У меня есть таблица, которая содержит информацию о клиентах, включая то, как они были направлены.
Например, MyTable
(РЕДАКТИРОВАТЬ: Мое чрезмерное упрощение привело к ответам, которые не будут работать. Это хорошие ответы, но не решают мою проблему. Я добавил для ясности последний фрагмент головоломки):
STORE CUS_ID REFERRED MONEYMADE
1 11 RADIO 10.00
1 15 WALKIN 20.00
1 11 RADIO 30.00
2 12 RADIO 40.00
2 12 RADIO 50.00
3 13 WALKIN 60.00
3 14 WALKIN 70.00
Я хочу посчитать количество DISTINCT клиентов, которые были отнесены к определенному типу, и сгруппировать их по магазинам. Я мог бы сделать следующее:
SELECT
STORE, COUNT(DISTINCT CUS_ID) AS COUNTEM,
REFERRED, SUM(MONEYMADE)
FROM MyTable
GROUP BY REFERRED, STORE
Это дает следующий результат:
STORE COUNTEM REFERRED MONEYMADE
1 1 RADIO 40.00
1 1 WALKIN 20.00
2 1 RADIO 90.00
3 2 WALKIN 130.00
Однако мне действительно нужны такие результаты:
STORE RADIO RADIO_MONEY WALKIN WALKIN_MONEY
1 1 40.00 1 20.00
2 1 90.00 0 0.00
3 0 0.00 2 130.00
Я попытался выполнить запрос, используя SUM и CASE, но он учитывает дубликаты. Например:
SELECT
STORE,
SUM (CASE REFERRED WHEN 'RADIO' THEN 1 ELSE 0 END) AS RADIO,
SUM (CASE REFERRED WHEN 'RADIO' THEN MONEYMADE ELSE 0 END) AS RADIO_MONEY,
SUM (CASE REFERRED WHEN 'WALKIN' THEN 1 ELSE 0 END) AS WALKIN
SUM (CASE REFERRED WHEN 'WALKIN' THEN MONEYMADE ELSE 0 END) AS WALKIN_MONEY,
FROM MyTable
GROUP BY STORE
Возвращает этот неверный результат:
STORE RADIO RADIO_MONEY WALKIN WALKIN_MONEY
1 2 40.00 1 20.00
2 2 90.00 0 0.00
3 0 0.00 2 130.00
Есть ли способ это осуществить? Я искал функции типа «count if», но единственное, что я нашел, - это метод суммирования.