0

例を明確にするためにシーンを設定しようとしますが、SQL Serverデータベースに2つのテーブルがあり、1つは人物名、DOB、お気に入りの色とID、もう1つはpersonIDと電子メールであると仮定します。これは1対多の関係です(1人に多くの電子メールアドレス)。2つの電子メールアドレスを持つ人が1人だけであると仮定しましょう。の結果をSELECT *自分のWebページに表示すると、2行が表示されます。唯一の違いは、電子メールアドレス(およびIDですが、この例では、IDの結果は表示しません)です。

私の質問は、これを回避して1つの「アイテム」として表示し、電子メールをコンマで区切るにはどうすればよいかということです。これらの画像を前後の画像と見なしてください。

データベースでの結合により2行であるため、データは2回表示されます。 ここに画像の説明を入力してください

そしてこれが私が欲しいものです:

ここに画像の説明を入力してください

Webページ内で、現在のIDをメモして各反復の以前のIDと比較し、IDで結果を並べ替えます。一致する場合は、previousIDがrecentIdと異なるまで電子メールの結果を表示し続けます。これは、以前にお気に入りの色を変数としてメモし、一致するIDがなくなったときにそれを表示することも意味します(これが理にかなっていることを願っています)。

これは大丈夫ですか、それともEFを使用する際のエレガントな方法はありますか?

4

2 に答える 2

1

電子メールを一覧表示する関数をデータベースに作成します。

CREATE FUNCTION PersonEmails
(
    -- Add the parameters for the function here
    @PersonID INT
) 

DECLARE @emailList VARCHAR(500)

SELECT @emailList = COALESCE(@emailList + ', ' , '') + email
    FROM PersonEmailTable
    WHERE PersonId = @PersonID

SELECT @emailList

次に、SQLクエリでその関数を呼び出します

SELECT Persons.*, dbo.PersonEmails(Persons.ID) as Emails FROM Persons
于 2013-02-15T16:16:18.657 に答える
1

xmlパスを使用してみてください:

select name, dob, substring(emails, 1, len(emails) - 1) as emails
from (
    select name, dob, (select email + ', '
                       from PersonEmail
                       for xml path('')) as emails
    from Person
) t
于 2013-02-15T17:37:27.900 に答える