使用GROUP BY、CTE与JOINS统计Tour Details表遇NULL问题求助
SQL查询问题:汇总Tour Details表时Grp列返回NULL的解决方案
现有表结构与数据
我有一张名为Tour Details的表,数据如下:
| dealdate | Tours | Weeknumber | Country | SubVenue |
|---|---|---|---|---|
| 2022-01-12 | 3 | 49 | India | SP1 |
| 2022-11-25 | 4 | 48 | India | SP2 |
| 2022-10-14 | 5 | 42 | India | SP3 |
| 2023-01-05 | 3 | 2 | India | SP1 |
| 2023-01-05 | 4 | 2 | India | SP2 |
| 2023-01-06 | 5 | 2 | US | SP1 |
| 2023-02-24 | 3 | 9 | US | SP2 |
| 2022-02-12 | 4 | 7 | US | SP3 |
| 2023-02-19 | 5 | 8 | US | SP1 |
| 2023-02-27 | 6 | 10 | US | SP2 |
需求汇总表
需要生成如下结构的汇总结果:
| Grp | Total Tours |
|---|---|
| Tours SP1 | 16 |
| Tours SP2 | 17 |
| Tours SP3 | 19 |
尝试的SQL代码
我用了以下SQL,但执行后Grp列全部为NULL:
WITH CTE AS ( SELECT 'Tours ' +SubVenue AS Grp FROM Tour_Details ) SELECT CTE.Grp , SUM(T.Tours) AS Total FROM Tour_Details T LEFT JOIN CTE ON CTE.Grp = T.SubVenue GROUP BY CTE.Grp, T.SubVenue
错误结果
执行后得到的结果:
| Grp | Total Tours |
|---|---|
| NULL | 16 |
| NULL | 17 |
| NULL | 19 |
问题原因与解决方案
原因分析
你的CTE里生成的Grp是'Tours ' + SubVenue(比如Tours SP1),但关联条件里用CTE.Grp = T.SubVenue,相当于拿Tours SP1和SP1做匹配,显然不会相等,导致左连接后CTE的Grp列全为NULL。另外,原CTE完全没必要,因为可以直接在主查询里构造Grp字段。
正确SQL代码
直接分组并构造Grp即可:
SELECT 'Tours ' + SubVenue AS Grp, SUM(Tours) AS [Total Tours] FROM [Tour Details] GROUP BY SubVenue
如果你的表名实际是Tour_Details(无空格),可以用:
SELECT 'Tours ' + SubVenue AS Grp, SUM(Tours) AS [Total Tours] FROM Tour_Details GROUP BY SubVenue
说明
- 直接在SELECT中拼接
'Tours ' + SubVenue生成Grp列,无需额外CTE - 按
SubVenue分组,对Tours求和得到Total Tours - 若表名包含空格,需用
[Tour Details]的形式引用,避免语法错误
内容的提问来源于stack exchange,提问作者Burt Ox
相关产品推荐
相关产品推荐

