0

私は次のテーブルを持っています

Id  StudentId       Subject         Date          Grade

1   001     Math        02/20/2013  A

2   001     Literature  03/02/2013  B

3   002     Biology     01/01/2013  A

4   003     Biology     04/08/2013  A

5   001     Biology     05/01/2013  B

6   002     Math        03/10/2013  C

以下に示すように、別のテーブルに結果が必要です。StudentReportこの表は、すべての生徒の記録を日付順に時系列で累積したレポートです。

Id StudentId       Report

1   001     #Biology;B;05/01/2013#Literature;B;03/02/2013#Math;A;02/20/2013

2   002     #Math;C;03/10/2013#Biology;A;01/01/2013

3   003     #Biology;A;04/08/2013
4

3 に答える 3

3

通常、このデータをテーブルに保存することはなく、レポートの生成に必要なすべてのデータが含まれています。

SQL Server にはコンマ区切りのリストを簡単に生成する方法がないため、次を使用FOR XML PATHしてリストを作成する必要があります。

;with cte as
(
  select id, 
    studentid,
    date,
    '#'+subject+';'+grade+';'+convert(varchar(10), date, 101) report
  from student
) 
-- insert into studentreport
select distinct 
  studentid,
  STUFF(
         (SELECT cast(t2.report as varchar(50))
          FROM cte t2
          where c.StudentId = t2.StudentId
          order by t2.date desc
          FOR XML PATH (''))
          , 1, 0, '')  AS report
from cte c;

SQL Fiddle with Demo (新しいテーブルへの挿入を含む)を参照してください。結果を与える:

| ID | STUDENTID |                                                          REPORT |
------------------------------------------------------------------------------------
| 10 |         1 | #Biology;B;05/01/2013#Literature;B;03/02/2013#Math;A;02/20/2013 |
| 11 |         2 |                         #Math;C;03/10/2013#Biology;A;01/01/2013 |
| 12 |         3 |                                           #Biology;A;04/08/2013 |
于 2013-05-02T16:50:33.997 に答える
0

「Students」から「Student Report」にデータを挿入する場合は、次のことを試してください。

INSERT INTO StudentReport (ID, StudentID, Report)
SELECT ID, StudentID, '#' + subject + ';' + grade + ';' + date AS report
FROM Students
于 2013-05-02T16:55:01.863 に答える