【问题标题】:Pivot Rows to Column By Group in SQL Server在 SQL Server 中按组将行透视到列
【发布时间】:2018-11-15 01:10:15
【问题描述】:

我正在寻找可以在 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-server sql-server-2008 pivot


【解决方案1】:

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

【讨论】:

  • 但是我如何使名称灵活,因为名称或名称并不总是相同
  • 那么您将需要Dynamic SQL。给我几分钟,我会更新我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
  • 2016-11-09
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
相关资源
最近更新 更多