0

この状況を説明する方法がわかりません。少し難しいので、私が持っているデータと必要な出力の例を示します。

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 のインスタンスを重複させることはできません。

4

4 に答える 4

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

于 2013-03-15T19:29:34.833 に答える
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
于 2013-03-15T19:31:02.707 に答える
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;

http://sqlfiddle.com/#!6/d235a/5

于 2013-03-15T19:35:59.793 に答える
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

于 2013-03-15T19:35:11.920 に答える