2

我在 Teradata SQL 中有如下表:

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

我有客户 ID 列表:

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

我需要从 myList 上的表中选择满足要求的客户 ID:

  1. 在 col1 值是“A”或“B”
  2. 在 col2 值大于 10 (>10)

因此,我需要如下所示:

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

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

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

4

2 回答 2

1

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

SELECT * 
FROM tablename
WHERE ID IN ('111', '222', '333')
  AND col1 IN ('A', 'B')
  AND col2 > 10
于 2021-07-08T10:03:50.057 回答
0

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

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检查对另外两个列的限制。

于 2021-07-08T09:56:42.447 回答