我有一个包含这些内容的表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
声明或任何其他方式获得我的结果?
请举个例子。
答案 0 :(得分:2)
您应该使用(左)外连接来解决此类情况。 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
答案 1 :(得分:0)
您可以尝试以下查询: -
SEELCT 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;
答案 2 :(得分:0)
请检查一下它的价值。
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;
显示以下结果
答案 3 :(得分:0)
您好,请尝试以下查询。
select decode(pr_user_id,null,null,user_id),pr_user_id IS NOT NULL则为user_name 别的'没有PR_USER' 以primary_user_name结尾 来自test_2;
101 AAA 102 BBB null NO PR_USER 104 FFF