У меня есть таблица клиентов с 4 возможными номерами телефонов для каждого клиента.У каждого телефонного номера также есть флаг.
Я пытаюсь выполнить запрос, чтобы найти клиентов, где: Если все телефонные номера, которые они представляют, ТАКЖЕ имеют установленный флаг.
Итак, им нужен одинили больше телефонных номеров НЕ НУЛЬ И И для каждого телефонного номера, который не является нулевым, имеет ли он флаг = 1
Я думаю, что могу написать очень длинный и запутанный запрос, чтобы получить это, но есть простой способЯ пропал?
CREATE TABLE #Listing (id INT,
Customer VARCHAR(50),
Phone1 VARCHAR(20) NULL,
Phone1Flagged BIT,
Phone2 VARCHAR(20) NULL,
Phone2Flagged BIT,
Phone3 VARCHAR(20) NULL,
Phone3Flagged BIT,
Phone4 VARCHAR(20) NULL,
Phone4Flagged BIT)
INSERT INTO #Listing VALUES(1, 'Dave', NULL, 0, NULL, 0, NULL, 0, NULL, 0)
INSERT INTO #Listing VALUES(2, 'Fred', '0712345678', 0, NULL, 0, NULL, 0, NULL, 0)
INSERT INTO #Listing VALUES(3, 'Bob', '0712121212', 1, '0123121212', 0, NULL, 0, NULL, 0)
INSERT INTO #Listing VALUES(4, 'Bill', NULL, 0, NULL, 0, '0799999999', 1, NULL, 0)
INSERT INTO #Listing VALUES(5, 'Bert', NULL, 0, NULL, 0, '0799999977', 0, '0799999988', 1)
INSERT INTO #Listing VALUES(6, 'Andy', '01212121212', 1, '0121212122', 1, '0799999977', 1, '0799999988', 1)
И запрос:
SELECT * FROM #Listing
SELECT
*
FROM
#Listing
WHERE
(
Phone1 IS NULL
OR
(
Phone1 IS NOT NULL
AND Phone1Flagged = 1
)
)
AND
(
Phone2 IS NULL
OR
(
Phone2 IS NOT NULL
AND Phone2Flagged = 1
)
)
--etc. etc. etc.
DROP TABLE #Listing
Результаты "Надеялись на"
id Customer Phone1 Phone1Flagged Phone2 Phone2Flagged Phone3 Phone3Flagged Phone4 Phone4Flagged
4 Bill False False 0799999999 True False
6 Andy 01212121212 True 0121212122 True 0799999977 True 0799999988 True