Teradata的案例时选择属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Teradata的案例时选择属性相关的知识,希望对你有一定的参考价值。

我在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语句。

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

答案

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

        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子查询。

另一答案

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

 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

以上是关于Teradata的案例时选择属性的主要内容,如果未能解决你的问题,请参考以下文章

数据库日期字段选择 long和datatime 哪个效率高

如何在 Vs Code 中更改默认自动选择的用户片段行为

授予对 Teradata 中所有表和视图(包括 dbc)的选择和读取权限

Teradata 5.1:使用代码将表导出到csv / txt / xls

在 teradata 的 sql 语句中使用字符串立即执行

如何在(Teradata)仅使用 ANSI SQL 时实现重置?