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 上并且满足要求:
- col1 中的值为“A”或“B”
- 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
我在 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 上并且满足要求:
- col1 中的值为“A”或“B”
- 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