2011-06-29 5 views
1

私はUserIds(ユニークな識別子)、名前、電子メールアドレス、リレーションシップのリストを持っています。最初のユニークな電子メールアドレスをSQLで選択する

何か

SELECT UserId, Name, Email, Relationship FROM Users 

のようなサンプル・データは、次のようになります。

F87B7702-F0EE-11D3-B288-0000B4A488D3 Peter [email protected] Member 
ZZZZZZZZ-F0EE-11D3-B288-0000B4A488D2 Joan [email protected] Principal 
AAAAAAAA-F0EE-11D3-EEEE-0000B4A488D3 Bob [email protected]  Principal 

関係はどちらか「校長」または「メンバー」であるが、主なユーザーは、メンバーになることができますすることができます。

電子メールアドレスはユーザー固有のものではありません(多くの場合、メンバーユーザーはプリンシパルユーザーと同じ電子メールアドレスを使用します)。

電子メールアドレスごとに1人のユーザーしか選択できないようにして、同じ人物が2回電子メールで送信されないようにする必要があります。同じユーザーのメールが2つある場合は、プリンシパルレコードを選択する必要があります。

uniqueidentifierフィールドでmaxを実行できないことに注意して、これを行う最も簡単な方法は何ですか?上記のサンプルデータについては、2番目と3番目のレコードのみを返す必要があります。

私はリレーションシップによる注文に向かって傾いていましたが、それまでにグループをやっていましたが、それは可能だとは思いません。

必要な出力はUserId、Name、Emailです。

+0

? –

+0

SQL Server 2008 R2 – woggles

+0

どのような出力列が必要ですか?それらのすべて?または単に原則の電子メールアドレスですか? UserIdを無視できますか? – gbn

答えて

3

ROW_NUMBER()内のORDER BYでは、メールの優先順位付け方法を選択できます。このような無原則が、複数の人とのメールに対処する方法として、(多分, Name ASCを追加するので、最初のアルファベット順に並べた名前を持つメンバーが選ばれます?)を使用しているどのようなデータベース

SELECT 
    * 
FROM 
(
    SELECT 
    *, 
    ROW_NUMBER() OVER (PARTITION BY email ORDER BY Relationship DESC) AS sequence_id 
    FROM 
    yourTable 
) 
    AS sequenced_table 
WHERE 
    sequence_id = 1 
+0

+1の配列表 – whosrdaddy

+0

は良いと思いました... ROW_NUMBER()が必要かもしれません。優雅なソリューションのためのthks :) – woggles

0

私は非常にあなたを理解していなかったが、あなたは一度だけ、電子メールを取得したい場合は、このコードがどうなる原則をユーザーにpreffering:

select UserId, Name, Email, Relationship 
from Table 
where Relationship='Principle' or (Relationship='Member' and Email not in 
(
select Email 
from Table 
where Relationship='Principle' 
) 
) 

これはあなたに2行目と3行目を与えます。より多くの条件がある場合は、例を展開します。

+0

です。アドレスにPrincipleはなく複数のメンバーがある場合は、複数のアドレスが与えられます。 – MatBailie

+0

複数のメンバーがある場合。私はそれが言うだけの質問でそれを見ませんでした:多くの場合、メンバーのユーザーはプリンシパルユーザーと同じ電子メールアドレスを持っています。プリンシパルユーザーもメンバーになることができます。 – sara

+0

考えてみましょう:同一人物は二度電子メールされません – sara