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个。此外,当参数允许数据以一行或多行的形式出现时,max的情况更大。
问题 有时我可能需要查询NTVC = COV的多种情况,但是我不确定在where子句中该如何做。如果我尝试这样写,就会给我一个错误。如果我尝试调用同一张表3次,那么它将占用大量CPU和假脱机。
我对您如何重写此查询以完成
感兴趣其中ntvc = cov表示有时为100万行的预期结果
使用的技术:teradata sql助手
答案 0 :(得分:0)
我猜想您想要一个HAVING
子句,而不是WHERE
子句,
having (max(case when SA.TYP = 'NTCV' then SA.AMT end) =
max(case when SA.TYP = 'COV' then SA.SRC end)
)