Select ID 在列表中的第 rowst 并且满足其他 2 个要求,可能是 Teradata 中的子查询 SQL?

Select rowst where ID is on list and meet 2 other requirement, probably subquery in Teradata SQL?

我在 Teradata SQL 中有 table,如下所示:

ID   | col1 | col2
-------------------
111  | A  | 54
222  | B  | 8
333  | C  | 17
444  | B  | 44
555  | A  | 1

我有客户 ID 列表:

myList = ['111', '222', '333']

而且我需要 select 来自 table 的客户的 ID,这些客户在 myList 上并且满足要求:

  1. col1 中的值为“A”或“B”
  2. col2 中的值大于 10 (>10)

因此我需要如下所示:

ID   | col1 | col2
--------------------
111  | A    | 54

因为 ID = 111 并且在 myList 上,col1 是“A”或“B”,col2 中的值大于 10。

我如何在 Teradata SQL 中做到这一点?可能在子查询中?

我们可以在这里尝试一种聚合方法:

SELECT *
FROM yourTable
WHERE ID IN ('111', '222', '333') AND
      ID IN (SELECT ID
             FROM yourTable
             GROUP BY ID
             HAVING COUNT(CASE WHEN col1 NOT IN ('A', 'B') THEN 1 END) = 0 AND
                    COUNT(CASE WHEN col2 > 10 THEN 1 END) > 0);

WHERE 子句将 ID 值限制为您的客户列表。 HAVING 子句中的两个条件检查对其他两个列的限制。

不需要子查询。
所有条件都可以在简单的 SELECT 语句的 WHERE 子句中与 AND 运算符组合:

SELECT * 
FROM tablename
WHERE ID IN ('111', '222', '333')
  AND col1 IN ('A', 'B')
  AND col2 > 10