SQL Server:从{TABLE}中选择不同的[COL1],其中[COL2]='A'和[COL2]'B'
我必须从{TABLE}中找到一个SELECT DISTINCT[COL1],从[COL1]中可以找到所有的[COL1],在[COL2]中有'a',但在[COL2]中没有'B' 在这种情况下,“3”和“4”应该是结果 桌子 或 或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中有一个“除全部”但未实现。因此我猜测:。感谢您提供的信息。我不能使用“除”,因此我尝试了另一个示例:-
你不应该添加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 )