首页 > 解决方案 > 在 SQL Server 中按组将行透视到列

问题描述

我正在寻找可以使用 SQL Server 2008 中的 group by 将行转换为列的代码。

这是我的桌子:

Name   |  Stdy   |  Val
-------+---------+-------
Kunjan | Technic |  80
Kunjan | Sains   |  90
Kunjan | Sport   |  60
Shone  | Technic |  60
Shone  | Sains   |  80
Shone  | Sport   |  70
Peudd  | Technic |  85
Peudd  | Sains   |  75
Peudd  | Sport   |  90

我最终想要显示的是这样的(对于上面的数据):

Stdy    | Kunjan | Shone | Peudd
--------+--------+-------+-------
Technic |  80    |  60   |  85
Sains   |  90    |  80   |  75
Sport   |  60    |  70   |  90

任何帮助,将不胜感激。

提前致谢。

标签: sql-serversql-server-2008pivot

解决方案


这可以使用PIVOT运算符来完成

select  *
from    yourtable
        pivot 
        (
            max(Val)
            for Name in ([Kunjan], [Shone], [Peudd])
        ) p

或条件CASE语句。例子很多,随便搜一下

编辑:对于动态案例

declare @sql    nvarchar(max),
        @col    nvarchar(max)

select  @col    = isnull(@col + ',', '') + Name
from    yourtable
group by Name

print   @col 

select  @sql    = 
'
select  *
from    youtable
        pivot 
        (
            max(Val)
            for Name in (' + @col + ')
        ) p
'

print   @sql
exec    sp_executesql @sql

推荐阅读