2017-01-23 4 views
0

は、このデータセットを返すためにSQLを構築するためにどのようにメール

Name Age occupation BillingContactEmail 
------------------------------------------- 
Peter 44 Salesman [email protected] 
Andy 43 Manager  [email protected] 
Halla 33 Fisherman [email protected] 

、ピーターと漢拏山、私は次の表を持っていると言うのインスタンスを取得します。メールのインスタンス? (私たちは最終的には個別の電子メールを持っています意味)

+0

どのようにアンディの上にピーターを選んだのですか? – Bohemian

+0

@ボヘミアンはランダムに行います – william007

答えて

0

は、あなたがより良いパフォーマンスを得るために、列のインデックスを作成検討する必要があり、この

;with cte (rowno, Name, Age, Occupation, BillingContactEmail) 
as (
    select row_number() over (partition by BillingContactEmail order by BillingContactEmail), Name, Age, Occupation, BillingContactEmail 
    from myTable 
) 
select Name, Age, Occupation, BillingContactEmail from cte 
where rowno = 1 

を試してみてください。当然の

あなたが選択する人になどの特定したい場合は、それに応じてorder byを微調整する必要があります。

年齢/職業は重要ではありませんならば、あなたはいつものように、電子メールでグループ化された名前を取得できます。

select stuff((select concat(',', Name) from myTable a where a.BillingContactEmail = t.BillingContactEmail for xml Path('')), 1, 1, '') as Name, 
     BillingContactEmail 
from myTable t 
group by BillingContactEmail 

出力:

Name   BillingContactEmail 
------------- -------------------- 
Peter,Andy [email protected] 
Halla   [email protected] 
0

Select distinct email, 
     (
      Select tb1.First_Name+ ',' AS [text()] 
      From dbo.table1 tb1 
      Where tb1.Email = '[email protected]' 
      For XML PATH ('') 
     ) [Students] 
From dbo.table2 
WHERE Email = '[email protected]' 
のようなものを試してみてください

出力:

Name   BillingContactEmail 
------------- -------------------- 
Peter,Andy, [email protected]