首页 > 解决方案 > 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  

标签: sqlsql-servertsql

解决方案


如果您使用的是 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';

请注意,此答案假定C1C2是 的唯一两个可能值col2。如果可能有其他值,那么上述逻辑将不得不稍微改变。


推荐阅读