2011-12-16 20 views

答えて

2

クエリでこれを行うのではなく、アプリケーション層で行います。

+0

これを行う方法?あなたは説明できますか? –

+0

明らかにそれは関係するレコードの数によって異なります。大きなレコードセットのアプリケーション層でこれを行うことに強くアドバイスします。 – deroby

+0

私はそれに同意しません。あなたはそれを使って遊ぶことができ、何が何回行われているかを見てください。 –

1

SQLではこれを行わないでください。最高であなたが試すことができます:

SELECT table1.memberId memberId1, table2.memberId MemberId2, PersonId 
FROM table table1 JOIN table table2 USING (PersonId) 

しかし、それはあなたが人のための2つ以上のメンバーを持っている場合は期待どおりに行いません。 (可能なすべての組み合わせが返されます)

0

以下は、SQLで直接行う方法の例です。最適化の余地が十分あることを念頭に置いてください。ただし、PersonIDと年のインデックスがある場合は、このバージョンはかなり高速になります。

SELECT DISTINCT PersonID, 
       memberId1 = Convert(int, NULL), 
       memberId2 = Convert(int, NULL) 
    INTO #result 
    FROM myTable 
WHERE Year IN (2 , 3) 

CREATE UNIQUE CLUSTERED INDEX uq0_result ON #result (PersonID) 

UPDATE #result 
    SET memberId1 = t.memberId 
    FROM #result upd 
    JOIN myTable t 
    ON t.PersionId = upd.PersonID 
    AND t.Year = 2 

UPDATE #result 
    SET memberId2 = t.memberId 
    FROM #result upd 
    JOIN myTable t 
    ON t.PersionId = upd.PersonID 
    AND t.Year = 3 

SELECT * FROM #result 
+0

クラスタ化インデックスは不要です。通常のものはうまくいくでしょうし、おそらくもっと速くなります。 – Ariel

+1

私は興味があり、いくつかのサンプルデータでいくつかのテストを行いました(objectID、user_type_idのmemberId、myTableと大規模データベースのsys.columnsを置き換えました)。クエリの計画と統計時間はほぼ同じですが、私の経験では、インデックスが適切であれば、通常は後で高速化されるので、インデックスの作成はクラスタリングされると若干遅くなることに同意します。 )また、ブックマーク検索の必要がなく、MSSQLがヒープを好きではないようだからです。IMHO – deroby

+0

結果セットを特定の順序で返す必要がある場合は、クラスタ化インデックスが使用されます(役立ちます)。テーブルにそのようなインデックスが1つあります。personIDをその列にすることは時期尚早です。このアプリケーションについてさらに知らなくても、アービトラでソートされた結果セットを返す必要はほとんどありませんpersonIDなどのID。私はどの列が順番にソートされているかを知った後でのみ、クラスタード・インデックスを作成します。ある列がわからない場合は、クラスタード・インデックスを使用せず、後でオプションとして残しておきます。 – Ariel

0

あなたは、各PERSON_IDのためのすべての会員IDをしたい場合、あなたは文字列が得られ

select distinct PersonId 
     , (select ' '+cast(t0.MemberId as varchar) 
      from table t0 
      where t0.PersonId=t1.PersonId 
      for xml path('') 
     ) [Member Ids] 
from table t1 

内のすべてのMEMBERID秒CONCATする[XMLパスのために]声明(素晴らしい機能) を使用することができます。

PersonId Members Ids 
1787  ' 4057 4502' 

あなたが本当にmemberIdsの無制限の数の別々の列を、必要な場合は、ピボットテーブルを 使用を検討したが、Uにはるかに複雑なse

関連する問題