以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于CASE表达式的一个问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=186715)

--  作者:czy66ds
--  发布时间:2023/5/23 13:35:00
--  关于CASE表达式的一个问题
执行下列代码通过
SE LECT Month(日期) AS 月,  SUM(成交金额)  AS \'本期金额\' FROM {某外部表} WH ERE Year(日期) = 2023 or Year(日期) = 2021 GROUP by Month(日期)

执行下列代码报错
SE LECT Month(日期) AS 月,CASE WHEN Year(日期) = 2023 THEN SUM(成交金额) ELSE NULL END   AS \'本期金额\',CASE WHEN Year(日期) = 2021 THEN SUM(成交金额) ELSE NULL END  AS \'前期金额\'  FROM {某外部表} WH ERE Year(日期) = 2023 or Year(日期) = 2021 GROUP by Month(日期)

报错信息:
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.8.18.1
错误所在事件:
详细错误信息:
选择列表中的列 \'全品牌销售记录表含品牌.日期\' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

何故?

--  作者:有点蓝
--  发布时间:2023/5/23 13:41:00
--  
SE LECT Month(日期) AS 月,SUM(CASE WHEN Year(日期) = 2023 THEN 成交金额 ELSE 0 END )  AS \'本期金额\',SUM(CASE WHEN Year(日期) = 2021 THEN 成交金额 ELSE 0 END ) AS \'前期金额\'  FROM {某外部表} 
--  作者:czy66ds
--  发布时间:2023/5/23 14:02:00
--  
经测试,这样写还是报同样的错误
--  作者:有点蓝
--  发布时间:2023/5/23 14:17:00
--  
select 月,SUM(本期金额) as 本期金额,SUM(前期金额) as 前期金额 from(SELECT Month(日期) AS 月,CASE WHEN Year(日期) = 2023 THEN 成交金额 ELSE 0 END   AS 本期金额,CASE WHEN Year(日期) = 2021 THEN 成交金额 ELSE 0 END  AS 前期金额  FROM 某外部表 WHERE Year(日期) = 2023 or Year(日期) = 2021 ) as a GROUP by 


--  作者:czy66ds
--  发布时间:2023/5/23 14:54:00
--  
谢谢,成功。