在创建子查询方面需要帮助。
我有两个表“部门访问信息”和“主题代码主表”。如果任何 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 编辑
答案 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'