2

次のサンプル テーブルからデータを取得する SQL Server クエリを作成したいと考えています。

Table: Person
ID      Name
--      ----
1       Bill
2       Bob
3       Jim

Table: Skill
ID      SkillName
--      -----
1       Carpentry
2       Telepathy
3       Navigation
4       Opera
5       Karate

Table: SkillLink
ID      PersonID        SkillID
--      --------        -------
1       1               2
2       3               1
3       1               5

ご覧のとおり、SkillLink テーブルの目的は、さまざまな (場合によっては複数またはまったくない) スキルを個々の人物に一致させることです。私のクエリで達成したい結果は次のとおりです。

Name    Skills
----    ------
Bill    Telepathy,Karate
Bob     
Jim     Carpentry

そのため、個々の Person ごとに、その Person を指すすべての SkillNames のコンマ結合リストが必要です。これは複数のスキルである場合もあれば、まったくない場合もあります。

これは明らかに、私が作業している実際のデータではありませんが、構造は同じです。

また、この質問を簡潔に表現することは私の問題の一部であるため、コメントとしてこの質問のより良いタイトルを自由に提案してください。

4

3 に答える 3

14

これには次のように使用FOR XML PATHします。

select p.name,
  Stuff((SELECT ', ' + s.skillName 
         FROM skilllink l
         left join skill s
           on l.skillid = s.id 
         where p.id = l.personid
         FOR XML PATH('')),1,1,'') Skills
from person p

デモで SQL Fiddle を参照してください

結果:

| NAME |            SKILLS |
----------------------------
| Bill | Telepathy, Karate |
|  Bob |            (null) |
|  Jim |         Carpentry |
于 2012-12-05T19:47:50.230 に答える
5

探しているのは、結果を行セットとして結合するSQLServerのFORXML PATH('')のようなものです。

Select Person.Name, 
  (
     Select SkillName + ',' 
     From SkillLink 
     inner join skill on skill.id = skilllink.skillid
     Where SkillLink.PersonID = Person.ID FOR XML PATH('')
  )
as Skills
FROM Person 
于 2012-12-05T19:35:31.167 に答える
0

探しているのは、結果を行セットとして結合するSQLServerのFORXMLPATHのようなものです。

于 2012-12-05T19:34:11.173 に答える