You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GROUP BY、CTE与JOINS统计Tour Details表遇NULL问题求助

SQL查询问题:汇总Tour Details表时Grp列返回NULL的解决方案

现有表结构与数据

我有一张名为Tour Details的表,数据如下:

dealdateToursWeeknumberCountrySubVenue
2022-01-12349IndiaSP1
2022-11-25448IndiaSP2
2022-10-14542IndiaSP3
2023-01-0532IndiaSP1
2023-01-0542IndiaSP2
2023-01-0652USSP1
2023-02-2439USSP2
2022-02-1247USSP3
2023-02-1958USSP1
2023-02-27610USSP2

需求汇总表

需要生成如下结构的汇总结果:

GrpTotal Tours
Tours SP116
Tours SP217
Tours SP319

尝试的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

错误结果

执行后得到的结果:

GrpTotal Tours
NULL16
NULL17
NULL19

问题原因与解决方案

原因分析

你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 04:02:00