Мне нужно получить результаты, которые будут включать только заголовки, в которых появляются и обновляются следующие комбинации в течение определенного диапазона дат. Проблема в том, что приведенный ниже код по-прежнему возвращает множество других заголовков, которые не входят в условие поиска.
Результат выглядит так: ясно, что с кодом что-то не так. Желаемый результат не возвращает ни одного из этих заголовков
USE My DB;--[dbo].[fn_StripCharacters]
;with cte_All as (
SELECT
--top 100
ID,
t.LastNameTx,
t.FirstName,
MyDB.[dbo].[fn_StripCharacters] (t.Title, '^a-z') as Stripped_Title,
t.Title,
t.City,
t.State,
t.VerificationDate,
t.VerifiedBy,
t.ModificationDate,
t.ModifiedBy,
'Higher Importance' AS Importance
FROM
My.dbo.MyTable t WITH (NOLOCK)
),
cte_TitleExceptions as (
SELECT
--top 100
ID,
t.LastNameTx,
t.FirstName,
MyDB.[dbo].[fn_StripCharacters] (t.Title, '^a-z') as Stripped_Title,
t.Title,
t.City,
t.State,
t.VerificationDate,
t.VerifiedBy,
t.ModificationDate,
t.ModifiedBy,
'Higher Importance' AS Importance
FROM
cte_All gc WITH (NOLOCK) -- ISCore.dbo.GovContact gc WITH (NOLOCK)
WHERE
COALESCE(CONVERT(DATE, t.VerificationDate),CONVERT(DATE, t.ModificationDate)) < DATEADD(m, -12, @DateInPast)
AND COALESCE(CONVERT(DATE, t.VerificationDate),CONVERT(DATE, t.ModificationDate)) != CAST(GETDATE() AS DATE) --@DateInPast
AND (
-- list of exeptions from Williamson Remot
-- gc.Stripped_Title LIKE '%Director%'
gc.Stripped_Title LIKE '%Human%'
OR gc.Stripped_Title LIKE '%HR%'
OR gc.Stripped_Title LIKE '%ITDirector%'
OR gc.Stripped_Title LIKE '%ITOfDirector%'
OR gc.Stripped_Title LIKE '%DirectorIT%'
OR gc.Stripped_Title LIKE '%DirectorOfIT%'
OR gc.Stripped_Title LIKE '%InformationTechnolog%'
OR gc.Stripped_Title LIKE '%Finance%'
OR gc.Stripped_Title LIKE '%CFO%'
OR gc.Stripped_Title LIKE '%ChiefFinancialOfficer%'
OR gc.Stripped_Title LIKE '%FinancialOffice%'
OR gc.Stripped_Title NOT LIKE '%Engineer%'
)
)
select
*
from
cte_TitleExceptions
У вас есть связка OR ... LIKE ... OR ... LIKE, а затем последние две строки - OR ... NOT LIKE ... '% Engineering%' и '% Engineer%'. Это в основном вернет все ваши другие заголовки, независимо от того, соответствуют ли они одному из «LIKE» или нет. Вы уверены, что эти двое должны быть «НЕ НРАВИТСЯ» ... или они должны находиться за пределами этого блока, в собственном «И»?


В ваших операциях OR есть ошибка
...
OR gc.Stripped_Title NOT LIKE '%Engineering%'
OR gc.Stripped_Title NOT LIKE '%Engineer%'
...
вы в основном говорите вернуть все, что не похоже на "% Engineer%", поэтому все приведенные выше инструкции будут бесполезны
если я правильно понял, ваш код должен быть таким:
...
AND (
-- list of exeptions from Williamson Remot
-- gc.Stripped_Title LIKE '%Director%'
gc.Stripped_Title LIKE '%Human%'
OR gc.Stripped_Title LIKE '%HR%'
OR gc.Stripped_Title LIKE '%ITDirector%'
OR gc.Stripped_Title LIKE '%ITOfDirector%'
OR gc.Stripped_Title LIKE '%DirectorIT%'
OR gc.Stripped_Title LIKE '%DirectorOfIT%'
OR gc.Stripped_Title LIKE '%InformationTechnolog%'
OR gc.Stripped_Title LIKE '%Finance%'
OR gc.Stripped_Title LIKE '%CFO%'
OR gc.Stripped_Title LIKE '%ChiefFinancialOfficer%'
OR gc.Stripped_Title LIKE '%FinancialOffice%'
)
AND (
gc.Stripped_Title NOT LIKE '%Engineer%'
-- these two can be combined to one
)
...
Это правильно
@eshirvana Не уверен, почему я должен сказать НЕ НРАВИТСЯ Мне нужно использовать LIKE, чтобы возвращать заголовки в моем поисковом запросе
@ enigma6205 Я ничего не говорю, вы использовали НЕ НРАВИТСЯ! см. свой код.
Если что-то имеет Human и необходимо вернуть эту запись. Но если плитки нет в других заголовках, указанных в предложении where, мне не нужно ее возвращать.
тогда это AND, а не OR, см. вторую часть моего ответа
@ enigma6205 добро пожаловать, примите в качестве ответа, если это помогло
предоставьте образцы данных и желаемый результат