选择子查询 - 基于值

时间:2021-07-09 16:47:27

标签: sql oracle

在创建子查询方面需要帮助。

我有两个表“部门访问信息”和“主题代码主表”。如果任何 Dept_code 的访问值为“ALL”,则需要组合这些表。以下是样本信息。

部门访问信息表输入主题代码为“全部”

<头>
部门代码 Subject_Code
101 aa1
102 所有
103 cc1

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

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

<头>
部门代码 Subject_Code
101 aa1
102 所有
103 cc1
所有 所有

Dept_Code_Master 表包含所有的 Dep_Code |部门代码| |---------| |101 | |102 | |103 | |104 |

学科代码主表

<头>
部门代码 Subject_Code
102 bb1
102 bb2
102 bb3
104 dd1

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

最终需要的输出:对于 Type-1 输入

<头>
部门代码 Subject_Code
101 aa1
102 bb1
102 bb2
102 bb3
103 cc1

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

<头>
部门代码 Subject_Code
101 aa1
102 bb1
102 bb2
102 bb3
103 cc1
104 dd1

**** 使用 Input2 编辑

2 个答案:

答案 0 :(得分:1)

那只是外连接,不是吗?

SELECT          CONCAT(MIN(M.Date), ' to ', MAX(M.Date)) AS DateRange, 
                SUM(M.Discharge) AS TotalDischarge, 
                SUM(M.Conviction) AS TotalConviction, 
                SUM(M.Acquittal) AS TotalAcquittal, 
                SUM(M.Other) AS TotalOther, 
                M.NewCase AS LastNewCase, 
                MP.NewCase AS LastOldCase
FROM            tmp_mytable AS M
    LEFT JOIN   tmp_mytable AS MP ON MP.ID = (SELECT MAX(M2.ID) FROM tmp_mytable AS M2)
WHERE           M.Date BETWEEN '2021-01-01' AND '2021-02-01'

答案 1 :(得分: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'
相关问题