如何在oracle中的CASE WHEN ELSE语句中使用select语句?

时间:2015-05-06 11:34:13

标签: sql oracle case

我有一个包含这些内容的表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声明或任何其他方式获得我的结果?

请举个例子。

4 个答案:

答案 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;

显示以下结果    enter image description here

答案 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