大家下午好,
我正在尝试组合 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
语句准确返回您需要的内容。