Teradata的案例时选择属性

问题描述 投票:0回答:2

我在Teradata的2个表 - “a”和“通道”。表CH包含2个colums “AMT” 和 “密码”。表之间的“A”和“通道”是LEFT JOIN。加入制成,并在SELECT部分​​我想总结AMT值。但是,当一个“代码”属性有一个上特有的价值观是要道上只拿70%的“AMT”的价值。

这是我曾尝试:

SELECT SUM 
       (
       CASE WHEN ch.code IN (SELECT code from ...)
          then 0.7*ch.amt
       )   
       else ch.amt
       END
FROM a LEFT JOIN ch

我得到一个错误:

在CASE表达式时第非法的表达。

谷歌表示,这是因为CASE不允许SELECT语句。

任何建议我如何能实现上述功能?

sql teradata
2个回答
0
投票

一个简单的解决方案是如下:

        SELECT SUM(
                    SELECT 0.7*amt AS amt 
                    FROM ch
                    WHERE ch.code = specific_value

                    UNION ALL 

                    SELECT amt from ch 
                    WHERE  ch.code <> specific_value
                  )
        FROM a LEFT JOIN ch 
        ON a.join_index = ch.join_index

如果没有索引加入这两个表,你将需要使用与UNION运算符连接在一起的两个SELECT子查询。


0
投票

既然你正试图写里面查询时我假设/的具体数值是从另一台基于一些其他条件。你可以尝试以下。

 SELECT 
      SUM(CASE WHEN MATCH = 1 THEN 0.7*AMT ELSE AMT END)
 FROM
      ( 
      SELECT AMT,CODE,
            CASE WHEN C.CODE IS NOT NULL THEN 1 ELSE 0 END AS MATCH
      FROM
      A LEFT OUTER JOIN CH
      ON JOIN_CONDITION
      LEFT OUTER JOIN 
      (SELECT CODE FROM ....) C
       ON CH.CODE=C.CODE) A
© www.soinside.com 2019 - 2024. All rights reserved.