SQL-запрос, имеющий несколько условий в предложении where - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь выполнить приведенный ниже запрос, но он не удовлетворяет условиям, которые я упомянул в предложении where. Сначала нужно выбрать термины, которые находятся в 36,48,60, и если термин равен 48, тогда значение не должно быть в диапазоне от -107 до -305, а если термин равен 60, значение не должно быть в диапазоне от 0 до 87 и не содержит -1304, -1204, а если term равен 36, то значение не должно быть больше -300. Но когда я запустил запрос, он дал все значения, которые я упомянул в исключении. Пожалуйста, помогите

select distinct
Market,
(select top 1 LDCAccountidentifier from siteidentification where siteoid=#final.siteoid) as CustAccNum,
SiteOID,
RtlrContractIdentifier,
ContractOID,
ContractType,
ContractStatus,
Term,
ProductCode,
SigningDate,
FlowStartDate,
FlowEndDate,
RenewalDate,
Dateadd(dd,(term*365/12),flowstartdate) as [FSD+Term],
datediff(dd,Dateadd(dd,(term*365/12),flowstartdate),RenewalDate) as DifferenceinDays,
UsageFrom,
UsageTo,
DealFSD,
DealFED,
ContractUpdateDate,
UsageUpdateDate,
DealUpdateDate,
replace(replace(ErrorMessage, char(13),', '), Char(10),'') as ErrorMessage
from #final
where term in(36,48,60)
or (term=48 and datediff(dd,Dateadd(dd,1460,flowstartdate),RenewalDate) not between -107 and -305)
or (term=60 and datediff(dd,Dateadd(dd,1825,flowstartdate),RenewalDate)not between 0 and 87)
or (term=60 and datediff(dd,Dateadd(dd,1825,flowstartdate),RenewalDate) not in(-1304,-1204))
or (term=36 and datediff(dd,Dateadd(dd,1095,flowstartdate),RenewalDate)<-300)

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Приведенный выше запрос неверен, вы должны использовать условие WHEN - THEN для достижения желаемого результата.

В идеале вы должны использовать регистр в SQL для того же. Примерно так:

SELECT
      CASE
        WHEN <Condition> AND <Condition>
            THEN
               --do your select query--
        WHEN <Condition> AND <Condition>
            THEN
                --do your select query-
        ELSE
            -- default task --
     END
  FROM <table name>
0 голосов
/ 29 октября 2018

Вы можете попробовать использовать фигурные скобки ниже для установки приоритета оператора ИЛИ

select distinct
Market,
(select top 1 LDCAccountidentifier from siteidentification where siteoid=#final.siteoid) as CustAccNum,
SiteOID,
RtlrContractIdentifier,
ContractOID,
ContractType,
ContractStatus,
Term,
ProductCode,
SigningDate,
FlowStartDate,
FlowEndDate,
RenewalDate,
Dateadd(dd,(term*365/12),flowstartdate) as [FSD+Term],
datediff(dd,Dateadd(dd,(term*365/12),flowstartdate),RenewalDate) as DifferenceinDays,
UsageFrom,
UsageTo,
DealFSD,
DealFED,
ContractUpdateDate,
UsageUpdateDate,
DealUpdateDate,
replace(replace(ErrorMessage, char(13),', '), Char(10),'') as ErrorMessage
from #final
where term in(36,48,60) and (
(term=48 and datediff(dd,Dateadd(dd,1460,flowstartdate),RenewalDate) not between -305 and -107)
or (term=60 and datediff(dd,Dateadd(dd,1825,flowstartdate),RenewalDate)not between 0 and 87)
or (term=60 and datediff(dd,Dateadd(dd,1825,flowstartdate),RenewalDate) not in(-1304,-1204))
or (term=36 and datediff(dd,Dateadd(dd,1095,flowstartdate),RenewalDate)<-300))
...