【发布时间】:2018-07-16 02:53:05
【问题描述】:
与我之前的问题here 相关,我正在尝试将COUNT 记录在HISTORY 表和OPPORTUNITIES 表中,并按CREATE_DATEs 的年份和季度对它们进行分组。
我希望每个季度的结果网格中有一行,一列用于 HISTORY 记录,一列用于 OPPORTUNITIES 记录:
+---------+---------------+---------------+
| Quarter | History Items | Opportunities |
+---------+---------------+---------------+
| 2017 Q1 | 15 | 25 |
| 2017 Q2 | 12 | 16 |
| 2017 Q3 | 13 | 18 |
| 2017 Q4 | 16 | 20 |
| 2018 Q1 | 17 | 18 |
+---------+---------------+---------------+
我可以得到我想要的任何一张桌子的结果,但是一旦我尝试加入它们,我就会遇到问题。我尝试了各种JOIN 和UNION 版本,但似乎无法正确处理。我可以通过我尝试的所有方式看到编码中的潜在问题,但无法弄清楚如何编写没有这些问题的代码。这是工作单表SELECT 查询:
SELECT DATENAME(year, H.CREATE_DATE) + ', Qtr' + DATENAME(quarter, H.CREATE_DATE) AS Period,
COUNT(H.ID) AS [History Items]
FROM HISTORY AS H
GROUP BY DATENAME(year, H.CREATE_DATE), DATENAME(quarter, H.CREATE_DATE)
ORDER BY Period;
我尝试添加第二个表的版本之一:
SELECT DATENAME(year, O.CREATE_DATE) + ', Qtr' + DATENAME(quarter, O.CREATE_DATE) AS Period,
COUNT(O.ID) AS Opportunities,
COUNT(H.ID) AS [History Items]
FROM OPPORTUNITY AS O FULL JOIN
HISTORY AS H ON DATENAME(year, O.CREATE_DATE) + DATENAME(quarter, O.CREATE_DATE) =
DATENAME(year, H.CREATE_DATE) + DATENAME(quarter, H.CREATE_DATE)
GROUP BY DATENAME(year, O.CREATE_DATE), DATENAME(quarter, O.CREATE_DATE)
ORDER BY Period;
为了便于测试和进一步澄清,here is a sample database with what I've been working on in sql fiddle。
【问题讨论】:
标签: sql-server aggregate-functions outer-join