假设我有一个返回结果,这样的查询添加一行:SQL时不存在
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年有1,2行1,2行 - >确定。但在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)
是否有类型> 2的记录?或者它总是1或1和2? – Chandu
对于我的问题,它只有1和2.如果答案可以解决一个列表,那么这是个好消息。 –