【问题标题】:For an id if a value is ever false than it's always false SQL对于一个 id,如果一个值永远是假的,而不是它总是假的 SQL
【发布时间】:2019-04-16 11:26:57
【问题描述】:

我有一个数据集,其中我创建了一个基于某些标准的值,我根据一些先前的值得到 True/False。现在,如果我的成员曾经是 False,他们需要有 1 条记录,其中他们始终是 False。数据类似如下

ID| Indicator
1  | TRUE    
1   | TRUE   
2   | FALSE 
3   | TRUE   
3   | FALSE  

我希望它看起来像这样

ID  |  Indicator
1   |  TRUE
2   | FALSE
3   | FALSE

但我不确定如何在 Teradata 中执行此操作

【问题讨论】:

  • 你尝试了什么?
  • Teradata 是否支持布尔类型?
  • 我尝试使用qualify语句查看我认为我过度思考的建议

标签: sql teradata teradata-sql-assistant


【解决方案1】:

Teradata 不支持布尔类型。所以,我假设指标是一个字符串。

在这种情况下,最简单的方法是min()

select id, min(indicator)
from t
group by id;

【讨论】:

  • 虽然我认为 Yogesh Sharma's 会起作用,但我选择了这个答案,但它不喜欢 CASE WHEN EXISTS 语法。我想如果我有一个多选选项,比如 True、False、Undecided,我会想使用另一个。
  • @JacobIan:不要使用exists 标量子查询,与聚合相比,它的效率非常低。如果你有多个选项,你可以输入一个 MIN/MAX(CASE ...)
【解决方案2】:

根据样本数据,我会这样做:

SELECT DISTINCT t.id,
       (CASE WHEN EXISTS (SELECT 1 
                          FROM table t1 
                          WHERE t1.id = t.id AND t1.Indicator = 'False'
                         ) 
             THEN 'False' 
             ELSE 'TRUE' 
        END) AS Indicator
FROM table t;

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2015-03-28
    • 2019-10-11
    • 2020-10-13
    相关资源
    最近更新 更多