sql - SQL Server:当行中存在 2 个值时选择
问题描述
我有一个 SQL 查询结果
col1 | col2 |
---|---|
A1 | C1 |
A1 | C2 |
A2 | C1 |
A3 | C1 |
A3 | C2 |
这是 SQL
SELECT
col1, col2
FROM
table
WHERE
col2 = 'C1' OR col2 = 'C2'
GROUP BY
col1, col2
现在的问题是,我怎样才能得到 col2 必须同时具有 C1 和 C2 值的结果,像这样(如您所见,A2 不在列表中,因为它没有 'C2' 不像 'A1 '和'A3')
col1 | col2 |
---|---|
A1 | C1 |
A1 | C2 |
A3 | C1 |
A3 | C2 |
更新:如果 col1 和 col2 来自 2 个表
SELECT
table.col1, table2.col2
FROM
table
INNER JOIN
table2
ON
table2.col3 = table.col3
WHERE
table2.col2 = 'C1'
OR
table2.col2 = 'C2'
GROUP BY
table.col1, table2.col2
解决方案
如果您使用的是 MySQL 8+,一种方法是:
WITH cte AS (
SELECT *, MIN(col2) OVER (PARTITION BY col1) min_col2,
MAX(col2) OVER (PARTITION BY col1) max_col2
FROM yourTable
)
SELECT col1, col2
FROM cte
WHERE min_col2 = 'C1' AND max_col2 = 'C2';
请注意,此答案假定C1
和C2
是 的唯一两个可能值col2
。如果可能有其他值,那么上述逻辑将不得不稍微改变。
推荐阅读
- c++ - C++ - *(int**) 地址?这里会发生什么?
- ios - 实现不同的细胞类型
- javascript - 这个css效果是怎么实现的?
- java - FXML 在其他选项卡中显示窗口
- javascript - JavaScript 查找字符串的“最新”版本
- groovy - Groovy:从两个范围创建一个二维数组
- html - height="x%" 不起作用
- api - Apostrophe CMS 中 api 调用的唯一字段类型和特定 GET 参数
- keras - 无效参数“class_mode”和 _make_train_function **self._function_kwargs)
- ruby-on-rails - Rails - 关联三个模型