2016-05-31 9 views
1

同じ列値を持つ行のIDを返す要求を作成しました。たとえば:複数の列に基づいて重複行を選択する

id | Value 
______________ 
1  | label1 
2  | label1 
3  | label1 
4  | label2 
5  | label2 

私は結果のこの種を取得したいのですが:

id | AlternateID | Value 
______________________________ 
1  | 2    | label1 
1  | 3    | label1 
4  | 5    | label2 

私がこれまでに得た最良の結果は次のとおりです。

id | AlternateID | Value 
______________________________ 
1  | 2    | label1 
2  | 1    | label1 
1  | 3    | label1 
3  | 1    | label1 
4  | 5    | label2 
5  | 4    | label2 

しかし、あなたが見ることができるよう、私は最初の2つの列に値を重複しています

...今、カーソルを使用しないで、私は立ち往生しています。

私は、SQL Server上であなたが同じ値とIDのペアをしたいように見えるあなたの助け

+1

数字の背後にある論理を説明できますか?それは私には分かりません。 –

+0

ここであなたが本当に探しているものはわかりません。グループ化してカウントしたいと思っていますか? – Chuck

+0

最初のテーブル番号は行のIDに対応します。 2番目のテーブルはマップに似ています。例えば、ID 1はID 2の代わりに使用でき、ID 3/ID 4はID 5の代わりに使用することができます グループ句の周りに何かがあると思います...しかし、私は本当にこだわっています... – r4phG

答えて

1

を適用参加又は外側外分列を取得します。

SELECT 
    a.id, 
    b.id as AlternateID, 
    a.value 
FROM 
    (SELECT MIN(id) as id , value FROM YourTable GROUP BY value) a 
JOIN YourTable b on a.value = b.value and a.id <> b.id 
+0

これは解決策でした!どうもありがとうございました ! – r4phG

1

のための2008年

感謝しています。

with t as (
     <your query here> 
    ) 
select t1.id as id1, t2.id as id2, t1.value 
from t t1 join 
    t t2 
    on t1.id < t2.id and t1.value = t2.value; 
+0

解決策の問題は私がこれを得ることです。 '1 | 2 | label1 '// ' 2 | 1 | label1' .... 私はこの結果を/ – r4phG

+0

@ r4phGという参加で得ました。 。 。どういたしまして。 't1.id

+0

あなたは正しいです、私は問題を引き起こした 't1.id <> t2.id'を使用しました。申し訳ありません。ありがとうございます – r4phG

0

まず自分の基本値を取得し、元のテーブルにそれを結合するために派生テーブルを使用して、代替値に

SELECT mt.id, mt2.AlternateID, mt.Value 
FROM (SELECT *, 
       ROW_NUMBER() OVER(PARTITION BY VALUE ORDER BY id) Rn 
      FROM myTable 
     ) mt 
     OUTER APPLY (SELECT id [AlternateID] -- use CROSS APPLY to only return dupes 
        FROM myTable mt2 
        WHERE mt2.VALUE = mt.VALUE AND mt2.id <> mt.id) mt2 
WHERE Rn = 1 
+0

申し訳ありません、これはうまくいくかもしれませんが、このクエリが機能しない場合があります。/ – r4phG

+0

実際のテーブル名を使用しましたか? – JamieD77

+0

^^。もちろん !私はOVER(PARTITION ...)の周りに問題があります。Rn – r4phG

関連する問題