SQL Server:从{TABLE}中选择不同的[COL1],其中[COL2]='A'和[COL2]'B'

SQL Server:从{TABLE}中选择不同的[COL1],其中[COL2]='A'和[COL2]'B',sql,sql-server,select,distinct,multiple-records,Sql,Sql Server,Select,Distinct,Multiple Records,我必须从{TABLE}中找到一个SELECT DISTINCT[COL1],从[COL1]中可以找到所有的[COL1],在[COL2]中有'a',但在[COL2]中没有'B' 在这种情况下,“3”和“4”应该是结果 桌子 或 或 你不应该添加DISTINCT吗?好的,只是问一下,因为我除了很多以外没有使用过。@jyparask-它类似于UNION vs UNION ALL。SQL Server中有一个“除全部”但未实现。因此我猜测:。感谢您提供的信息。我不能使用“除”,因此我尝试了另一个示例:-

我必须从{TABLE}中找到一个SELECT DISTINCT[COL1],从[COL1]中可以找到所有的[COL1],在[COL2]中有'a',但在[COL2]中没有'B' 在这种情况下,“3”和“4”应该是结果

桌子


你不应该添加DISTINCT吗?好的,只是问一下,因为我除了很多以外没有使用过。@jyparask-它类似于UNION vs UNION ALL。SQL Server中有一个“除全部”但未实现。因此我猜测:。感谢您提供的信息。我不能使用“除”,因此我尝试了另一个示例:-您不应该添加“不同”吗?好的,只是问一下,因为我没有太多地使用“除”。@jyparask-它类似于UNION vs UNION ALL。SQL Server中有一个“全部除外,但未实现”。因此我猜测:。感谢您提供的信息。我无法使用“除外”,因此我尝试使用另一个示例:-
   [COL1]      [COL2]
   ----        ----
   '1'          'A'
   '1'          'B'
   '1'          'C'
   '2'          'B'
   '2'          'C'
   '3'          'A'
   '3'          'C'
   '4'          'A'
   '4'          'D'
SELECT [COL1] from {TABLE} WHERE [COL2] = 'A' 
EXCEPT
SELECT [COL1] from {TABLE} WHERE [COL2] = 'B'
SELECT [COL1]
FROM   {TABLE}
GROUP  BY [COL1]
HAVING MAX(CASE
             WHEN [COL2] = 'A' THEN 1
             ELSE 0
           END) = 1
       AND MAX(CASE
                 WHEN [COL2] = 'B' THEN 1
                 ELSE 0
               END) = 0 
SELECT DISTINCT [COL1]
FROM {TABLE} t1
WHERE t2.[COL2] = 'A'
AND NOT EXISTS
(
    SELECT 1
    FROM {TABLE} t2
    WHERE t2.[COL1] = t1.[COL1]
    AND t2.[COL2] = 'B'
)
;WITH MyCTE AS
(
    SELECT DISTINCT [COL1]
    FROM   [TABLE]
    WHERE  [COL2] = 'B'
)
SELECT DISTINCT [COL1]
FROM   [TABLE]
WHERE  [COL2] = 'A'
AND    [COL1] NOT IN (SELECT [COL1] FROM MyCTE )