以下の表があります(idとLocは主キーです)
ID LOC RNK NBR1 NBR2 1 2 A 10 b ---> 3 4 A 10 b ---> 5 6 A 11 C 8 2 A 12 D 6 3 A 10 b --->
したがって、ここでは、NBR1とNBR2に従って重複レコードのみをフェッチする必要があります。重複(--->とマークされている)だけでなく、すべてのレコードをフェッチする必要があります。
以下の表があります(idとLocは主キーです)
ID LOC RNK NBR1 NBR2 1 2 A 10 b ---> 3 4 A 10 b ---> 5 6 A 11 C 8 2 A 12 D 6 3 A 10 b --->
したがって、ここでは、NBR1とNBR2に従って重複レコードのみをフェッチする必要があります。重複(--->とマークされている)だけでなく、すべてのレコードをフェッチする必要があります。
私があなたの質問を正しく理解していれば、サブクエリでそれを行うことができます
CREATE TABLE #Test (ID int, LOC int, RNK char(1), NBR1 int, NBR2 char(1) )
INSERT INTO #Test VALUES
(1, 2, 'A', 10, 'b'),
(3, 4, 'A', 10, 'b'),
(5, 6, 'A', 11, 'C'),
(8, 2, 'A', 12, 'D'),
(6, 3, 'A', 10, 'b')
SELECT *
FROM #Test t1
WHERE EXISTS
(SELECT 1
FROM #Test t2
WHERE t1.NBR1 = t2.NBR1
AND t1.NBR2 = t2.NBR2
GROUP BY NBR1, NBR2
HAVING COUNT(1) > 1)
これも使えますが、費用が高くなります。値が 1 より大きい RowsCount は重複しており、値が 1 の場合は一意のレコードです。
With Temp As
(
Select ID,LOC,RNK,NBR1,NBR2,Row_NUMBER() OVER (PARTITION BY NBR2 ORDER BY NBR1) AS ROWSCOUNT FROM <<TABLE_NAME>>
)
Select * from Temp