0

次のテーブルがあります。

Studentテーブル:

Id          Name
1           A
2           B

Marksテーブル:

StudentId SubjectId Marks
1           1       67
1           2       89
2           1       78
2           2       86

以下のように、特定の StudentId と SubjectId、Marks 列の複数の行を 1 つの列に連結したいと考えています。

結果:

Id          Name   SubjectMarks
1           A       1:67,2:89
2           B       1:78,2:86

やってみFOR XML PATHました。1列では機能しますが、2列ではクエリを書くことができませんでした。

4

2 に答える 2

1

SQL フィドル

MS SQL Server 2008 スキーマのセットアップ:

CREATE TABLE Student  (Id INT, Name VARCHAR(10))
INSERT INTO Student VALUES 
(1 ,'A'),
(2 ,'B')

 CREATE TABLE Marks  (StudentId INT , SubjectId INT , Marks INT)
INSERT INTO Marks VALUES 
(1     ,      1   ,    67),
(1     ,      2   ,    89),
(2     ,      1   ,    78),
(2     ,      2   ,    86)

クエリ 1 :

;WITH cte AS 
 (
  SELECT StudentId 
       , CAST(SubjectId AS VARCHAR(10)) + ':' 
          + CAST(Marks AS VARCHAR(10)) AS SubjectMarks
  FROM Marks
 )
SELECT DISTINCT
       S.Id
      ,S.Name
      ,STUFF((SELECT ',' + SubjectMarks
              FROM cte
              WHERE x.StudentId = StudentId
              FOR XML PATH(''),TYPE)
              .value('.','Varchar(max)'),1,1,'') AS SubjectMarks
FROM cte x
INNER JOIN Student S ON S.Id = x.StudentId

結果

| Id | Name | SubjectMarks |
|----|------|--------------|
|  1 |    A |    1:67,2:89 |
|  2 |    B |    1:78,2:86 |
于 2015-08-15T19:25:28.810 に答える