SQL - Как мне объявить группу имен людей, которые будут использоваться в моем запросе? - PullRequest
0 голосов
/ 12 июня 2018

У меня есть 5 запросов, которые я буду выполнять все одновременно, чтобы вернуть 5 разных групп данных - все, что они делают, общего у меня - мое утверждение ниже:

HAVING  (   LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%BRIAN%MILLER%') OR 
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%LATEASHA%CALVERT%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%CHERITA%MARTIN%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%CARMALITA%MCQUEEN%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%CRAIG%NADRATOWSKI%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%SCOTT%SMOLINSKI%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%ALISHA%WILLIAMS%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%SHANNON%MURPHY%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%MICHELLE%COLE%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%ROGER%KONKEL%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%DANIELLE%JONES%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%SABRINA%WARNER%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%CORINNE%DUBETZ%'))

Я бы хотелопределить этих людей в начале моего запроса для последующего использования в утверждении о наличии или утверждении where, в основном говоря:

HAVING (left(comm.LONG_COMM_LINE_1, CHARINDEX('-',comm.LONG_COMM_LINE_1) - 2) LIKE [anyone that I've already defined above]

Я не уверен, возможно ли это вообще или нет, как бы я поступилоб этом.Любая помощь будет очень ценна!

1 Ответ

0 голосов
/ 15 июня 2018

Чтобы развернуть комментарий Алекса К, вы можете начать с переменной таблицы:

DECLARE @People TABLE ([Name] VARCHAR(128)); 
INSERT @People VALUES ('%BRIAN%MILLER%'),('%LATEASHA%CALVERT%'),('%CHERITA%MARTIN%')

Теперь предположим, что у меня есть таблица Member , и мне нужно найти членовв этой таблице, основанной на ваших критериях, запрос может выглядеть следующим образом (я просто группирую по имени, чтобы соответствовать вашему примеру):

SELECT 
    M.[Name]
FROM 
    mem.Member M
GROUP BY 
    M.[Name]
HAVING 
    (EXISTS(SELECT 1 FROM @PEOPLE P WHERE M.Name LIKE P.Name))

Более конкретно для вашего примера:

SELECT 
    comm.[LONG_COMM_LINE_1]
FROM 
    comm
GROUP BY 
    comm.[LONG_COMM_LINE_1]
HAVING 
    (EXISTS(SELECT 1 FROM @PEOPLE P WHERE  LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', 
comm.LONG_COMM_LINE_1) - 2) LIKE P.Name))

Вот документы на СУЩЕСТВУЕТ для справки

...