使用两个CTE对问题进行分组

时间:2017-06-16 19:02:37

标签: sql sql-server

代码正在提供正确的数字 - 分组给我一个问题,这可能是一个基本的代码选择问题。查询如下:

With 
P as ( Select sum(r.qty) as proposed, rm.entity, id, 
quarter (case When status = open then quarter = 1 ELSE 3 END) AS QUARTER, 
year (case When status = open then year = 2017 ELSE 2016 END) AS YEAR,
FROM Db1
Group By proposed, quarter, id, entity, quarter, year)

A as ( Select sum(r.qty) as awarded, rm.entity, id, 
quarter (case When status = open then quarter = 2 ELSE 4 END), 
year(case When status = open then year = 2018 ELSE 2016 END) 
From DB1
Group By proposed, quarter, id, entity, quarter, year
)

SELECT * FROM P right join a on p.id = a.id
Group By proposed, quarter, id, entity, quarter, year

我的回报是这样的:

ID  p.Quarter p.Year  a.Quarter  a.Year  Proposed Awarded
1     null      null     1       2017    null      1
2      2        2018     3       2017    1         1
2      1        2018     4       2016    1         1
3     null      null     2       2018    null      2

我想:

ID  p.Quarter p.Year  a.Quarter  a.Year  Proposed Awarded
1     null      null     1       2017    null      1
2      2        2018     null    null    1         null
2      1        2018     null    null    1         null
2     null      null     3       2017    null      1
2     null      null     4       2017    null      null
3     null      null     2       2018    null      2

问题是 - 如果ID具有建议的日期,数量,授予日期和数量,我希望所有年份和季度都显示在id分组之外。因此,每个获奖或提议的计数将拥有它自己的行。否则计数就出错了。

我从两个不同的数据库中提取并且我的Case语句要复杂得多,但是添加了大量与此无关的代码种子。

0 个答案:

没有答案