0

在创建子查询时需要帮助。

我有两个表 "Department Access Info" & "Subject Code Master Table" 。如果任何 Dept_code 的访问值为“ALL”,则需要合并这些表。以下是样本信息。

Subject_Code 为“ALL”的部门访问信息表输入

部门代码 主题_代码
101 aa1
102 全部
103 cc1

如果有“ALL”的主题代码,那么我们需要参考主题代码特定表来获取所有主题。例如,对于 Dept_Code,“102”可以访问“ALL”主题。

输入类型 -2,Dept_Code 为“ALL”,Subject_Code 为“ALL”

部门代码 主题_代码
101 aa1
102 全部
103 cc1
全部 全部

有包含所有 Dep_Codes |Dept_Code| 的 Dept_Code_Master 表 |----------| |101 | |102 | |103 | |104 |

主题代码主表

部门代码 主题_代码
102 bb1
102 bb2
102 bb3
104 dd1

通过组合 101 、 102 和 103 部门代码最终需要的结果如下:

最终所需输出:用于 Type-1 输入

部门代码 主题_代码
101 aa1
102 bb1
102 bb2
102 bb3
103 cc1

最终需要的输出:类型 2 输入(所有公司,所有帐户)

部门代码 主题_代码
101 aa1
102 bb1
102 bb2
102 bb3
103 cc1
104 dd1

**** 使用 Input2 编辑

4

2 回答 2

1

这只是外部连接,不是吗?

SQL> select a.dept_code,
  2    case when a.subject_code = 'ALL' then b.subject_code
  3         else a.subject_code
  4    end subject_code
  5  from code_master a left join subject_code_master b on a.dept_code = b.dept_code
  6  order by 1, 2;

DEPT_CODE  SUBJECT_CODE
---------- ---------------
101        aa1
102        bb1
102        bb2
102        bb3
103        cc1

SQL>
于 2021-07-09T19:19:36.733 回答
0

对于您提供的示例,看起来不需要子查询。

WITH CODE_MASTER AS
  ( SELECT '101' AS Dept_code,
           'aa1' AS Subject_Code
      FROM dual
      UNION
     SELECT '102' AS Dept_code,
           'All' AS Subject_Code
      FROM dual
      UNION
     SELECT '103' AS Dept_code,
           'cc2' AS Subject_Code
      FROM dual
  ),
SUBJECT_CODE_MASTER AS
  ( SELECT '102' AS Dept_code,
           'bb1' AS Subject_Code
      FROM dual
      UNION
     SELECT '102' AS Dept_code,
           'bb2' AS Subject_Code
      FROM dual
      UNION
     SELECT '102' AS Dept_code,
           'bb3' AS Subject_Code
      FROM dual
  )
SELECT CODE_MASTER.DEPT_CODE,
       COALESCE(SUBJECT_CODE_MASTER.subject_code, CODE_MASTER.subject_code) AS Subject_Code
  FROM CODE_MASTER 
  LEFT
  JOIN SUBJECT_CODE_MASTER
    ON CODE_MASTER.dept_code = SUBJECT_CODE_MASTER.dept_code
   AND CODE_MASTER.Subject_Code = 'All'
于 2021-07-09T19:15:26.913 回答