Rit*_*ita 1 t-sql sql-server case sql-server-2008
我试图在 WHERE 子句中搜索 CaseStatement。但我没有发现与我的场景相似。
下面是我在 WHERE 子句中使用 CASE 语句的 SQL 语句。如果PartName = B,那么我应该应用 ( RecoveraleFlag = 1 ) 条件以及其他条件。其他 此条件不适用,但所有其他条件应保持不变。
FROM Rec.Communications A
INNER JOIN REC.CommunicationTypes B ON A.CommunicationTypeKey = B.CommunicationTypeKey
INNER JOIN occ.Cases c ON a.CaseId = c.CaseId
INNER JOIN occ.Claims cl on a.CaseId = cl.CaseId
INNER JOIN ops.Concepts d ON c.ConceptKey = d.ConceptKey
INNER JOIN OPS.Regions f ON d.MODSRegionKey = f.MODSRegionKey
INNER JOIN COM.RepriceRequestOccurrences e ON a.CommunicationId = e.CommunicationId
INNER JOIN occ.Providers prv ON c.MODSProviderKey = prv.MODSProviderKey
WHERE
**(
CASE WHEN f.PartName = 'B' and e.RecoverableFlag = 1 then 1
ELSE 0
END
) = 1**
AND
b.CommunicationTypeCode = 'RREQ'
AND f.Region = @Region
AND a.CurrentFlag = 1
Run Code Online (Sandbox Code Playgroud)
如果 Partname = B,则 where 子句中的 Case 语句可以正常工作。对于 Partname A,这将是 0=1 –始终为 false。因此,它不返回任何数据。任何人都可以提供任何替代方案。
作为案例陈述,您可以将其写为:
CASE WHEN f.PartName = 'B' and e.RecoverableFlag = 1 then 1
WHEN f.ParName = 'A' then 1
ELSE 0 END ) = 1
Run Code Online (Sandbox Code Playgroud)
这是你想要的逻辑吗?
许多人会认为 case 语句在这里无关紧要,而是使用:
WHERE ((f.PartName = 'B' and e.RecoverableFlag = 1) or (f.partName <> 'B')) . . .
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13069 次 |
| 最近记录: |