У меня есть подзапрос, который работает автономно, но при использовании в качестве фильтра, похоже, ничего не делает.
Мои данные не содержат NULL. Я могу выполнить подзапрос и получить количество ожидаемых клиентов (клиентов с идентификаторами PID, такими как% CLUSTER%), но когда я выполняю полный запрос, предложение WHERE NOT IN, по-видимому, не отфильтровывает клиентов в подзапросе. запрос выбирает.
SELECT PID, ROUND(SUM(bookings),0) AS Bookings
FROM d_bookings
WHERE GU_Name NOT IN (
SELECT DISTINCT(GU_NAME)
FROM d_bookings
WHERE PID LIKE '%CLUSTER%'
AND Sales_Level_1 IN (
'GLOBAL SERVICE PROVIDER'
,'APJC__'
,'EMEAR-REGION'
,'AMERICAS'
,'CORP ADJUSTMENT'
)
AND Corp_Bookings = 'Y'
)
GROUP BY PID
ORDER BY Bookings DESC;
Результат не должен содержать PID, таких как% CLUSTER%. На английском я хочу получить общее количество бронирований для всех PID, проданных клиентам, которые не приобрели кластер. Подзапрос составляет список клиентов, которые DID покупают кластер, и я пытаюсь исключить этих клиентов из результата.
Вот пример таблицы:
DROP TABLE IF EXISTS tmpbook;
CREATE TABLE tmpbook ("FYQ" char(10), "gu_name" char(10),"PID" char(20), "bookings" numeric);
INSERT INTO tmpbook
VALUES
('FY2019Q1', 'Company1','CLUSTER1',12345.67),
('FY2019Q1', 'Company1','SOMETHINGELSE',2345.67),
('FY2019Q1', 'Company2','CLUSTER2',345.67),
('FY2019Q1', 'Company2','SOMETHINGELSE',12345.67),
('FY2019Q1', 'Company3','SOMETHINGELSE',2345.67),
('FY2019Q1', 'Company3','SOMETHINGELSE',345.67)
;
Ожидаемый результат будет
NOTACLUSTER 2691,34 (2345,67 + 345,67)
потому что только Компания3 не купила кластер (следует исключить Компанию1 и Компанию2, потому что они ДА купили кластер.