我不知道如何解释这种情况,这有点棘手,所以我会尝试给你一个我拥有的数据和我需要的输出的例子:
CREATE TABLE #TempTable( A int, B int)
INSERT INTO #TempTable (A,B)
VALUES
(1,1),
(1,2),
(1,2),
(1,4),
(3,2),
(3,2),
(3,2),
(3,3),
(3,3);
我无法弄清楚如何选择所有记录,以便最终输出为:
1,1
1,4
3,3
3,3
我需要记录,其中B列只有A列的不同实例。所有其他实例都应该被忽略... 我觉得这应该很简单,但我是在消隐我无法理解。
更新:
我一直很难解释这一点,但我认为这是正确的逻辑:对于给定的A,您可以有B的重复实例,但是不能在不同的A上有B的重复实例。
答案 0 :(得分:2)
SELECT A, B FROM TempTable
WHERE B IN (
SELECT B
FROM TempTable
GROUP BY B
HAVING COUNT(DISTINCT A) = 1
)
MS SQL 2012上的工作示例:http://sqlfiddle.com/#!6/d235a/4
答案 1 :(得分:2)
尝试:
with cte as
(select t.*, min(A) over (partition by B) minA, max(A) over (partition by B) maxA
from #TempTable t)
select A, B
from cte
where minA=maxA
答案 2 :(得分:1)
SELECT A, B, COUNT(A) as NumPairs
FROM TempTable
GROUP BY A, B
HAVING COUNT(A)=1
SQLFiddle - http://sqlfiddle.com/#!6/ee6c5/9
答案 3 :(得分:1)
SELECT t1.A, t1.B
FROM TempTable t1
LEFT JOIN TempTable t2
ON t1.B=t2.B AND t1.A<>t2.A
WHERE t2.A IS NULL;