假设我有一个返回结果如下的查询:
Project Year Type Amt
PJ00001 2012 1 1000
PJ00001 2012 2 1000
PJ00001 2011 1 1000
PJ00002 2012 1 1000
我想要什么:每个项目每年都会有 2 行类型。如果该行不存在,则将其添加到 Amt = 0 的结果中
。例如:
- PJ00001 在 2012 年有 2 行类型为 1,2 --> OK。但在 2011 年,它只有 1 行类型 1 --> 我们添加一行:PJ00001 2011 2 0
- PJ00002 只有 1 行类型 1 --> 添加:PJ00002 2012 2 0
有没有办法轻松做到。我现在知道的唯一方法是创建一个类似的视图:PJ_VIEW。接着:
SELECT *
FROM PJ_VIEW
UNION ALL
SELECT t.PROJECT, t.YEAR_NO, 1 AS TYPE_NO, 0 AS AMT
FROM PJ_VIEW t
WHERE NOT EXISTS (SELECT 1 FROM PJ_VIEW t2 WHERE t2.PROJECT = t.PROJECT AND t2.YEAR_NO = t.YEAR_NO AND t2.TYPE_NO = 1)
UNION ALL
SELECT t.PROJECT, t.YEAR_NO, 2 AS TYPE_NO, 0 AS AMT
FROM PJ_VIEW t
WHERE NOT EXISTS (SELECT 1 FROM PJ_VIEW t2 WHERE t2.PROJECT = t.PROJECT AND t2.YEAR_NO = t.YEAR_NO AND t2.TYPE_NO = 2)