在where子句

时间:2018-12-07 08:03:52

标签: sql case where-clause teradata-sql-assistant

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助手

1 个答案:

答案 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) 
       )