Teradata-在Case语句中嵌套聚合操作

Teradata-在Case语句中嵌套聚合操作,teradata,case-statement,Teradata,Case Statement,我在尝试运行下面的脚本时遇到一个错误“无法嵌套聚合操作”。我搜索了其他标题类似的问题,但它们没有解决这个问题 我试图对一个时期的数据求和,对同一时期的其他数据求和,然后从另一个时期中减去一个。在我的脑海里似乎很简单!有人能帮忙吗 SELECT SUM(CASE WHEN a.post_ts(DATE) between 1140921 and 1140927 THEN (pnt_amt(DEC (16,0))) - sum ((dlr_val*1000)*-1)END) Week 34

我在尝试运行下面的脚本时遇到一个错误“无法嵌套聚合操作”。我搜索了其他标题类似的问题,但它们没有解决这个问题

我试图对一个时期的数据求和,对同一时期的其他数据求和,然后从另一个时期中减去一个。在我的脑海里似乎很简单!有人能帮忙吗

SELECT 
SUM(CASE WHEN a.post_ts(DATE) between 1140921 and 1140927 THEN (pnt_amt(DEC (16,0)))   
- sum ((dlr_val*1000)*-1)END) Week 34 
FROM DB.T1 b  
,DB.T2 a 
LEFT JOIN DB.T3 c ON A.OID = C.OID 
WHERE a.lid = b.lid 
或者这个:

Sel
SUM(CASE WHEN a.post_ts(DATE) between 1140921 and 1140927 THEN (pnt_amt(DEC (16,0)))  
-  SUM(CASE WHEN a.post_ts(DATE) between 1140921 and 1140927 THEN sum ((dlr_val*1000)*-1)END)week_34
 FROM DB.T1 b  
,DB.T2 a 
LEFT JOIN DB.T3 c ON A.OID = C.OID 
WHERE a.lid = b.lid 

我不知道你到底想做什么,但可能是这样的:

SELECT 
SUM(CASE WHEN a.post_ts(DATE) BETWEEN 1140921 AND 1140927 THEN (pnt_amt(DEC (16,0))) END  
- SUM((dlr_val*1000)*-1)) Week 34 
FROM DB.T1 b  
,DB.T2 a 
LEFT JOIN DB.T3 c ON A.OID = C.OID 
WHERE a.lid = b.lid 


顺便说一句,您可以简单地使用
-dlr\u val*1000)
而不是
dlr\u val*1000)*-1
,最好切换到
日期“2014-02-02”
而不是
1140202
,这样更容易理解。

谢谢!我所需要的只是另一个“结束”——感谢您澄清了符号更改声明,我一直认为我的代码有点笨重。至于日期,我习惯于使用我使用的格式,但我知道其他人更容易阅读标准日期格式。再次感谢!注意:我修改了第二个脚本示例中的日期范围,以便在查询的两个部分中反映相同的日期范围,这与我的意图一致。DNOETH在他的响应中复制了我的原始脚本,但他的响应也需要在查询的两个部分中反映相同的日期范围。添加注释以帮助未来读者理解其意图。
SEL
SUM(CASE WHEN a.post_ts(DATE) BETWEEN 1140921 AND 1140927 THEN (pnt_amt(DEC (16,0))) END) 
-  SUM(CASE WHEN a.post_ts(DATE) BETWEEN 1140202 AND 1140208 THEN (dlr_val*1000)*-1 END)week_34
 FROM DB.T1 b  
,DB.T2 a 
LEFT JOIN DB.T3 c ON A.OID = C.OID 
WHERE a.lid = b.lid