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的案例时选择属性的主要内容,如果未能解决你的问题,请参考以下文章
授予对 Teradata 中所有表和视图(包括 dbc)的选择和读取权限