我有一个过时的存储过程,如下所示:
CASE
WHEN (org.org_misc_data = 'PAC') THEN 'pac'
WHEN (org.dues_category = 'PART') THEN 'partner_member'
WHEN (org.dues_category = 'FREE' AND org.org_status_flag = 'P') THEN 'associate_member'
ELSE 'non_member'
END AS org_status
它当前编写的方式,只要它遇到第一个WHEN
子句,我的org_status
值将是“pac”。有人可以指示我如何重写这个,以便org_status
可以包含返回多个值(即:“pac | partner_member”)。
答案 0 :(得分:2)
如何只使用两个CASE
表达式?
CASE
WHEN (org.org_misc_data = 'PAC') THEN 'pac|' ELSE '' END
+ CASE
WHEN (org.dues_category = 'PART') THEN 'partner_member'
WHEN (org.dues_category = 'FREE' AND org.org_status_flag = 'P') THEN 'associate_member'
ELSE 'non_member'
END AS org_status
很难给出确定的答案,因为你还没有真正概述所有可能的排列。
答案 1 :(得分:1)
哦,那太好了。 SQL不支持从案例中多次返回。
如果你不喜欢字符串操作,你可以这样做:
select *,
left(org_status_letter, charindex('|', org_status_letter) - 1) as org_status,
substring(org_status_letter, charindex('|', org_status_letter) + 1, 1000) as letter
from (select (CASE WHEN (org.org_misc_data = 'PAC') THEN 'pac|a'
WHEN (org.dues_category = 'PART') THEN 'partner_member|b'
...
ELSE 'non_member'
END) AS org_status_letter
更强烈的解决方案将涉及查找表。因此,您的case语句将生成一个唯一键。然后,此密钥将连接到查找表,您可以拥有任意数量的值。但是,这适用于常量,但不适用于公式。
答案 2 :(得分:0)
我认为,不是将这些值组合在一起,然后在以后将它们分解出来,最好始终将它们分开。
CASE
WHEN (org.org_misc_data = 'PAC') THEN 1 ELSE 0 END AS IsPack,
CASE
WHEN (org.dues_category = 'PART') THEN 'partner'
WHEN (org.dues_category = 'FREE'
AND org.org_status_flag = 'P') THEN 'associate'
ELSE 'non' END AS MemberStatus
END AS org_status
答案 3 :(得分:-1)
您可以启动AND'条件并返回相应的值......
CASE
WHEN (org.org_misc_data = 'PAC' AND org.dues_category = 'PART') THEN 'pac|partner_member'
....
END AS org_status