0

SQLServerデータベースに次のテーブルがあります。

[ANIMALS]            [COLORS]
ID | NAME            ID | NAME
 1   Cow              1   Blue
 2   Chicken          2   Red
 3   Pig              3   Green
 4   T-Rex            4   Pink
                      5   Orange

  [RELATIONSHIPS]         
ANIMAL ID | COLOR ID  
    1          3
    1          2
    1          5
    2          1
    3          1
    3          4
    4          1
    4          2
    4          5

動物のリストとそれぞれの色を返すSQLクエリを作成しようとしています。私が達成しようとしている目標は次のようになります。

  ANIMAL NAME     COLORS
     Cow            Green/ Red / Orange
     Chicken        Blue
     Pig            Blue/ Pink
     T-Rex          Blue/ Red/ Orange              

udf_Delimit_Colors(@animalID)という区切り文字列( "color / color /など")を作成するユーザー定義関数が既にあります。@animalIDはそのUDF内の唯一のパラメーターです。

animalIDを渡すことで1行しか返すことができず、IDを渡さずに目標を達成する方法に困惑しています。

区切られたSQLクエリは、次のリンクにあります: https ://sites.google.com/site/sqlblindman/creatingcomma-delimitedstrings

+それを書いた人に返信します。

私もまだ取り組んでいるので、わかったら答えを投稿します。ご入力いただきありがとうございます。

4

1 に答える 1

2

上記の構文に基づいて、データベースとしてSQLServerを想定しています。次の方法で文字列を連結できます。

SELECT a.name,
  LEFT(colors , LEN(colors)-1) colors 
FROM animals a
CROSS APPLY
(
    SELECT c.name + ' / '
    FROM colors c
    left join relationships r
      on c.id = r.[COLOR ID]
    where a.id = r.[ANIMAL ID]
    FOR XML PATH('')
) m (colors)

SQL FiddlewithDemoを参照してください

または:

select a.name,
  STUFF((SELECT distinct ' / ' + c.name
         from colors c
         left join relationships r
           on c.id = r.[COLOR ID]
         where a.id = r.[ANIMAL ID]
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,2,'') colors
from animals a;

SQL FiddlewithDemoを参照してください

結果は次のとおりです。

|    NAME |                COLORS |
-----------------------------------
|     Cow | Red / Green / Orange  |
| Chicken |                 Blue  |
|     Pig |          Blue / Pink  |
|   T-Rex |  Blue / Red / Orange  |
于 2013-02-08T22:53:58.360 に答える