oracle如何在CASE WHEN ELSE语句中使用select语句?
Posted
技术标签:
【中文标题】oracle如何在CASE WHEN ELSE语句中使用select语句?【英文标题】:How to use select statement in CASE WHEN ELSE statement in oracle? 【发布时间】:2015-05-06 11:34:12 【问题描述】:我有一张表USER
,内容如下:
USER_ID User_Name City zip PR_USER_ID
--------- ----------- ------ ----- ------------
101 AAA PPP 123 101
102 BBB QQQ 345 101
103 CCC RRR 567 NULL
104 FFF SSS 789 102
我需要在过程中添加一个查询来显示User_Name
:
CASE WHEN PR_USER_ID IS NULL
THEN 'NO_PR_USER'
ELSE ... get the `User_Name`
corressponding to USER.USERID = USER.PR_USER_ID
如我所愿:
SELECT
CASE
WHEN USR.PR_USER_ID IS NULL THEN 'NO PR_USER'
ELSE (
SELECT USR.NAME
FROM USER USR
WHERE USR.USER_ID = USR.PR_USR_ID
) PRIMARY_USER_NAME
END
使用这个查询我得到USER_NAME
:
SELECT
PRIMARY_USER.NAME AS PRIMARY_USER_NAME
FROM USER SECONDARY_USER
INNER JOIN USER PRIMARY_USER ON PRIMARY_USER.USER_id = SECONDARY_USER.PR_USER_ID;
但我需要这样的输出:
PR_USER_ID PRIMARY_USER_NAME
------------ -------------------
101 AAA
101 AAA
NULL No_PR_USER
102 BBB
如何以CASE WHEN ELSE
语句或任何其他方式获取我的结果?
请举个例子。
【问题讨论】:
您是否同时使用 mysql 和 Oracle? (不要标记未涉及的产品...) 我只使用Oracle11g 【参考方案1】:您应该使用(左)外连接来解决这种情况。 NVL
/COALESCE
将负责用一些硬编码值替换 NULL。 类似的东西:
SELECT T...., T...., NVL(USR.NAME, 'NO PR_USER' )
FROM USER T
LEFT JOIN USER USR
ON USR.USER_ID=T.PR_USER_ID
【讨论】:
【参考方案2】:请检查它是否适合您。select user_id,case when pr_user_id IS NOT NULL then user_name
else 'NO PR_USER'
end as primary_user_name
from user_name;
它显示以下结果
【讨论】:
但我需要这样的输出:PR_USER_ID PRIMARY_USER_NAME 101 AAA 101 AAA NULL No_PR_USER 102 BBB 能否以表格格式提供给我,因为我无法更正您的输出?【参考方案3】:您好,请尝试以下查询。
select decode(pr_user_id,null,null,user_id),case when pr_user_id IS NOT NULL then user_name
else 'NO PR_USER'
end as primary_user_name
from test_2;
101 AAA
102 BBB
null NO PR_USER
104 FFF
【讨论】:
【参考方案4】:您可以尝试以下查询:-
SELECT CASE WHEN USR.PR_USER_ID IS NULL THEN 'NO PR_USER'
ELSE USR.NAME END AS PRIMARY_USER_NAME
FROM USER USR
WHERE USR.USER_ID=USR.PR_USR_ID;
【讨论】:
以上是关于oracle如何在CASE WHEN ELSE语句中使用select语句?的主要内容,如果未能解决你的问题,请参考以下文章