【发布时间】:2019-05-08 23:32:05
【问题描述】:
SELECT
M.Id_x as Id
max(case when SA.TYP = 'CHRG' then SA.AMT end) CHRG,
max(case when SA.TYP = 'NTCV' then SA.AMT end) NC,
max(case when SA.TYP = 'COV' then SA.SRC end) COV
FROM database.tableA M
LEFT OUTER JOIN
database.tableB SA
On
(SA.Id_x = M.id_x
AND SA.date = m.date
AND SA.SRC=M.SRC)
Where M.date >= '2018-01-01'
And m.src = 'ox'
And sa.type IN ('CHRG', 'NTCV', 'COV')
Group by
M.id_x
M.date
已知 NTCV/COV 可以 = '?'或数值
背景 我在参数时使用 max case 的原因是为了研究数据库如何将每个 Id 与一个类型相关联,并且每个类型可能有也可能没有数值。我不希望数据有这么多行,因为有其他表加入。为简单起见,我只显示这 2 个。此外,当参数允许数据作为一行而不是多行时的最大情况。
问题 有时我可能需要查询 NTVC = COV 的多个场景,但我不确定如何在 where 子句中进行查询。如果我尝试这样写它会给我一个错误。如果我尝试调用同一张表 3 次,那么它会使用大量 CPU 和线轴。
我很感兴趣您将如何重写此查询以完成
其中 ntvc = cov 表示有时 1m 行的预期结果
使用的技术:teradata sql assistant
【问题讨论】:
-
您通常按您选择的列进行分组,除了那些作为设置函数的参数的列。
-
WHERE 子句中的那个 sa 条件使得左连接返回常规的内连接结果。要获得真正的左连接结果,请将条件移至 ON 子句。
-
请提供样本数据和期望的结果。我无法理解你对你想要什么的解释。例如,我不知道这是什么意思:“Known NTCV/COV can = '?'或数值”。
标签: sql case where-clause teradata-sql-assistant