在SQL Server中将数据透视表行按组列

时间:2018-11-15 01:10:15

标签: sql-server sql-server-2008 pivot

我正在寻找一种可以在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

任何帮助将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:0)

这可以使用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