【发布时间】:2017-09-03 05:57:24
【问题描述】:
我正在尝试返回特定 ID 的所有行,其中与这些 ID 关联的任何行都满足条件。请原谅我是 SQL 的新手……示例如下:
-
ID * 行 * # *
12 * 1 * A *
- 12 * 2 * B *
- 12 * 3 * X *
- 12 * 4 * 是 *
- 15 * 1 * A *
- 15 * 2 * B *
- 15 * 3 * C *
除了我的选择和条件 = (X、Y 或 Z) 之外,不确定要返回的代码是什么:
-
ID * 行 * # *
12 * 1 * A *
- 12 * 2 * B *
- 12 * 3 * X *
- 12 * 4 * 是 *
我想提取所有行记录,尽管它们不满足条件,只要它们是具有满足条件的行的 ID 的一部分。
感谢您的帮助!
* 编辑:包括尝试的代码*
SELECT ID
,LINE
,#
WHERE ID,
IN (
SELECT ID
WHERE # IN ('X','Y','Z'))
结果:
ID LINE #
12 3 X
12 4 Y
我需要什么:
ID LINE #
12 1 A
12 2 B
12 3 X
12 4 Y
我几乎觉得我需要使用我的 IN('X','Y','Z') 条件创建一个 ID 和 LINE 临时表,然后在 ID 上为所有 LINE(s) 而不是 X ,Y,Z。我认为这可能有效,但我还没有学会如何使用临时表。我有点麻烦,因为我正在使用一个查询,在这里我已经简化了很多,我在这里选择了 18 个字段,这些字段加入了 7 个其他表。我认为这只是使我对子查询的理解复杂化,而不是受其影响的子查询。
感谢大家迄今为止的帮助和解答!
【问题讨论】:
-
是三列还是一列?
-
使用子查询来识别 ID,然后使用带有 ID
IN的子查询返回实际行 -
scsimon 的代码在正确使用时应该可以工作。你试过我的 OLAP 方法了吗?
-
我是否应该在加入之前将该代码包含在我的所有选择语句中?我的查询结构为 SELECT(17 个字段)、FROM、JOIN(许多连接)、WHERE - 这是我拥有上述代码和其他条件的地方。
-
是的,就是这样,只需将
MAX(CASE)添加到您现有的 Select 中
标签: sql sql-server teradata