1

私はこれを自分で理解することはできません。誰かが私を助けてくれることを願っています。

userscardsrefereesおよびの3 つのテーブルがあります。users_cards

ユーザー:

id  |   userName  |   referee_id
----------------------------
1   |   u1        |    1
2   |   u2        |    1
3   |   u3        |    2

レフェリー:

id  |   refName
--------------
1   |   ref1
2   |   ref2

カード:

id  |   cardName
--------------
1   |   card1
2   |   card2

ユーザー_カード:

user_id  |   card_id  |   color   |   number
-------------------------------------------
1        |   1        |   red     |   123
1        |   2        |   yellow  |   312
2        |   2        |   yellow  |   523
3        |   1        |   red     |   344

私が得たい結果は次のとおりです。

id   |   userName   |   refName   |   cards
1    |      u1      |    ref1     |   card1: red (123), card2: yellow (312)
2    |      u2      |    ref1     |   card2: yellow (523)
3    |      u3      |    ref2     |   card1: red (344)

等々...

ユーザーが複数のカードを持っている場合、取得できるのは複数の行だけです。では、どうすればこのように組み合わせることができますか。

私を助けてくれる人に感謝します!

編集:

現在、私はLEFT JOINsを使用しています

SELECT UserName, refName cardName, color, number,
FROM users
LEFT JOIN referees ON users.referee_id = referees.id
LEFT JOIN users_cards ON users.id = users_cards.user_id
LEFT JOIN cards ON dbo.users_cards.card_id = cards.id
4

2 に答える 2

0

テーブルの結果をフォーマットして結果に追加する簡単な方法はないと思います。次の内容のストアド プロシージャを試すことができます。

CREATE TABLE #temp
(
    user_id int,
    CardString nvarchar(50)
)

CREATE TABLE #userCards
(
    user_id int,
    CardsList nvarchar(50)
)

DECLARE @UserID int,
        @cardName nvarchar(50),
        @cardList nvarchar(250) 

INSERT INTO #temp
SELECT user_id, cardName + ': ' + color + ' (' + number + ')'
FROM User_Cards AS UC
INNER JOIN Cards AS C ON C.card_id = UC.card_id

WHILE EXISTS (SELECT * FROM #temp)
BEGIN
   SELECT TOP(1) @UserID = user_id FROM #temp

   SET @cardList = ''

   WHILE EXISTS (SELECT * FROM #temp WHERE user_id = @UserID)
   BEGIN
      SELECT TOP(1) @cardName = [CardString] FROM #temp WHERE user_id = @UserID
      IF @cardList <> ''
         SET @cardList = @cardList + ', '
      SET @cardList = @cardList + @cardName
   END

   INSERT INTO #userCards
   VALUES (user_id, @cardList)
END

SELECT users.id, users.userName, referees.refName, CardsList 
FROM users
LEFT JOIN referees ON users.referee_id = referees.id
LEFT JOIN #userCards ON #userCards.card_id = users.user_id

DROP TABLE #userCards
DROP TABLE #temp

これにより、必要なコンテンツが返されます。集計関数を定義することもできます ( http://msdn.microsoft.com/en-us/library/ms190678.aspxを参照) 。

于 2013-07-18T10:10:03.320 に答える