在 where 子句中,嵌套大小写 when 语句返回带有'OR'的结果



大家下午好,

我正在尝试组合 2 个单独的函数来创建半动态 where 子句。目前,我的SQL数据库中有3个相同的视图,除了以下一行待处理的用户状态外,它们几乎相同。

对于西澳用户。(dbo.JunctionT.ProcessState = 'CDS' )

对于维多利亚州用户。(dbo.JunctionT.ProcessState = 'VIC' OR dbo.JunctionT.ProcessState = 'WA')

对于新南威尔士州用户。(dbo.JunctionT.ProcessState = 'NSW')

因此,如果用户来自新南威尔士州,则返回其用户状态的结果..如果用户来自西澳,则返回结果,其中ProcessState为CDS,如果用户来自VIC,则返回结果,其中ProcessState为VIC或WA。

我写了以下嵌套案例 when 语句,尝试将这 3 个视图合并为 1:

`dbo.JunctionT.ProcessState = 
(CASE 
WHEN dbo.fnGetReviewState(CURRENT_USER) = 'NSW' THEN 'NSW' 
WHEN dbo.fnGetReviewState(CURRENT_USER) = 'WA' THEN 'CDS' 
WHEN dbo.fnGetReviewState(CURRENT_USER) = 'VIC' THEN 'VIC OR WA' 
END)`

这似乎对新南威尔士州和西澳用户都非常有效,但是当我以 VIC 用户的身份试用它时,它什么也没返回。我怀疑这可能是语法问题,但我尝试了以下方法,但没有取得多大成功:

尝试使用:("维多利亚州或西澳州")、("维多利亚州"或"西澳州")、["维多利亚州"或"西澳州"]、<"维多利亚州"或"西澳州

>希望知识渊博的人能够向我展示我缺少什么,甚至提出更好的方法来完成这个动态陈述。提前非常感谢!!

肖恩·

Brien 很接近。这应该可以解决问题:

case
when dbo.JunctionT.ProcessState = 'NSW' and
dbo.fnGetReviewState(CURRENT_USER) = 'NSW' then 1
when dbo.JunctionT.ProcessState = 'CDS' and
dbo.fnGetReviewState(CURRENT_USER) = 'WA' then 1
when dbo.JunctionT.ProcessState in ( 'VIC', 'WA' ) and
dbo.fnGetReviewState(CURRENT_USER) = 'VIC' then 1
else 0
end = 1

'VIC OR WA'字面意思是"VIC OR WA",这就是为什么没有行返回的原因。dbo.JunctionT.ProcessState必须等于"VIC OR WA"(此精确/文字字符串)才能返回行。

你想要的而不是dbo.JunctionT.ProcessState IN ('VIC','WA')

因此,涉及动态 SQL 元素,以便让您的CASE语句准确返回您需要的内容。