sql - 如何连接 teradata 中的两个表,其中输出列是根据条件计算的?
问题描述
我有两个表,表 1:
Col1_1 Col1_2
A X
B Y
C Z
表 2:
Col2_1 Col2_2 Col2_3 Col2_4
A X 6/20/2018 10
B Y 8/13/2018 20
C Z 6/27/2018 10
A X 8/13/2018 40
B Y 9/3/2018 80
C Z 12/1/2018 5
这是我正在寻找的输出(今天的日期是 6/18/2018 ):
Col1_1 Col1_2 Sum of Col2_4 between today and (today + 5 days) Sum of Col2_4 between (today + 5 days) and (today + 10 days)
A X 10 0
B Y 0 0
C Z 0 10
这是我目前在 teradata 中的代码:
SELECT
Col1_1,
Col1_2,
Case
WHEN Col2_3 > CURRENT_DATE and Col2_3 < CURRENT_DATE+5
THEN SUM (Col2_4)
ELSE '0'
End as Calculated_Col_1,
Case
WHEN Col2_3 > CURRENT_DATE+5 and Col2_3 < CURRENT_DATE+10
THEN SUM (Col2_4)
ELSE '0'
End as Calculated_Col_2,
FROM Table1 as A
INNER JOIN Table2 as B
ON A.Col1_1 = B.Col2_1
AND A.Col1_2 = B.Col2_2
WHERE -- ? ?
我被困在如何定义SELECT
语句中的列名以及如何WHERE
定义条件。
任何建议表示赞赏!谢谢!
解决方案
您需要将 SUM 移到 CASE 之外,并且在 HAVING 中应用计算列上的条件:
SELECT
Col1_1,
Col1_2,
SUM(Case
WHEN Col2_3 > CURRENT_DATE and Col2_3 < CURRENT_DATE+5
THEN Col2_4
ELSE 0
End) as Calculated_Col_1,
SUM(Case
WHEN Col2_3 > CURRENT_DATE+5 and Col2_3 < CURRENT_DATE+10
THEN Col2_4
ELSE 0
End as Calculated_Col_2,
FROM Table1 as A
INNER JOIN Table2 as B
ON A.Col1_1 = B.Col2_1
AND A.Col1_2 = B.Col2_2
HAVING Calculated_Col_1 > 1111 -- ot whatever
推荐阅读
- mysql - 使用 SQL 打印带订单的前 5 名 team_leaders
- python - Python Json 在带有名称的 jsonfile 中创建一个列表
- solidity - Remix Debugger 我需要重新编译吗?
- c# - 可搜索的动态组合框 WPF
- c++ - 以 union 作为方法参数
- next.js - 如何播放具有多种分辨率的 HLS 视频(m3u8 播放列表)?
- qt - 如何从 .prl 文件中构建 qt .lib 文件
- loader - Pixi js - 加载程序没有达到 100% 的进度
- opencv - 关于 cv2.fillpoly 的第三个参数
- java - Greenfoot Kara ZigZag 代码无法正常工作