我遇到了最后一个选择语句OR的问题.我们想要的是包括TIER = T1但只有COST> 500和skilllevel ='S'的记录.但是这行的最后一行只需要是一个OR.AND将遗漏大部分记录.
Insert Into @tblMain
Select * from (
SELECT distinct a.ID_KEY,a.STAT, a.TIER, f.FACILITY_ID, f.FACILITY_NAME Name, a.RX, a.PATIENTNAME, a.MEDICATION , (a.COST) as Cost, (a.COST) as Interchanges, s.Savings Savings
FROM[PBM].[T_CHARGES] a
--Inner Join PBM.FACILITY f on a.FACILITYNPI = f.FACILITY_NPI
inner Join PBM.PHARMACY_NPI pn on a.PHARMACYNPI = pn.NPI
Inner join PBM.PHARMACY_FACILITY pp on pn.PHARMACY_ID = pp.PHARMACY_ID
inner Join PBM.FACILITY f on pp.FACILITY_ID = f.FACILITY_ID AND a.FACILITYNPI = f.FACILITY_NPI
Left Outer Join @TableSum s on a.ID_KEY = s.ID_KEY
where f.FACILITY_NAME is not null
and month(a.DATEDISPENSED) = @Month and year(a.DATEDISPENSED) = @Year
and f.FACILITY_ID = @FacilityId
and a.STAT not in (3,4,5)
and (TIER <> 'T1' )
--OR (TIER = 'T1' AND COST>500 AND SKILLLEVEL = 'S' )
Run Code Online (Sandbox Code Playgroud)
默认情况下,sql server NOT优先于AND,AND优先于OR
NOT --> AND --> OR
Run Code Online (Sandbox Code Playgroud)
要执行非默认订单,您可以使用括号.
...........
and f.FACILITY_ID = @FacilityId
and a.STAT not in (3,4,5)
and (
(TIER <> 'T1')
OR
(TIER = 'T1' AND COST > 500 AND SKILLLEVEL = 'S' )
)
Run Code Online (Sandbox Code Playgroud)
SQL Server将尊重评估顺序的括号,我认为您需要:
...
AND
(
(TIER <> 'T1')
OR
(TIER = 'T1' AND COST>500 AND SKILLLEVEL = 'S')
)
Run Code Online (Sandbox Code Playgroud)