在 SQL Server 中将列透视为行

Smi*_*ley 3 sql-server pivot

我有一个返回整行的查询,我需要将此结果转换到一个新表中。

SELECT id_no, stud_name, group_no, class_1, class_2, class_3, class_4 FROM tbl_stud_class
Run Code Online (Sandbox Code Playgroud)

这将返回以下内容:

| id_no | stud_name | group_no | class_1 | class_2 | class_3 | class 4 |
| 1     | John Doe  | A11      | 84      | 60      | 80      | 79      |
Run Code Online (Sandbox Code Playgroud)

我需要能够将这一行返回为:

| id_no | stud_name | group_no | class   | grade |
| 1     | John Doe  | A11      | class_1 | 84    |
| 1     | John Doe  | A11      | class_2 | 60    |
| 1     | John Doe  | A11      | class_3 | 80    |
| 1     | John Doe  | A11      | class_4 | 79    |
Run Code Online (Sandbox Code Playgroud)

有人可以指点我一种方法吗?我正在转换我的 PostgreSQL 函数(我使用 CROSS JOIN LATERAL 到 SQL Server)

谢谢你!

Joh*_*tti 5

另一种选择是使用 CROSS APPLY

例子

Select A.id_no
      ,A.stud_name
      ,A.group_no
      ,B.*
 From  YourTable A
 Cross Apply ( values ('class_1',class_1)
                     ,('class_2',class_2)
                     ,('class_3',class_3)
                     ,('class_4',class_4)
              ) B(class,grade)
Run Code Online (Sandbox Code Playgroud)

退货

id_no   stud_name   group_no    class       grade
1       John Doe    A11         class_1     84
1       John Doe    A11         class_2     60
1       John Doe    A11         class_3     80
1       John Doe    A11         class_4     79
Run Code Online (Sandbox Code Playgroud)