【问题标题】:SQL Server PIVOT multiple datesSQL Server PIVOT 多个日期
【发布时间】:2017-01-25 22:39:35
【问题描述】:

您好,我的数据在这样的表中:

Herd | Tag | Byr | Mob | Date        | Trait | Value
-----|-----|-----|-----|-------------|-------|-------
6002 | 1/08| 2008| 1   | 2015-08-17  | LWT   | 425
6002 | 1/08| 2008| 3   | 2015-12-22  | LWT   | 516
6002 | 1/08| 2008| 4   | 2016-04-06  | LWT   | 688

我需要使用 PIVOT 函数将其从长格式更改为宽格式

Herd | Tag | Byr | Mob | 2015-08-17 | Mob | 2015-12-22 | Mob | 2016-04-06
-----|-----|-----|-----|------------|-----|------------|-----|------------
6002 | 1/08| 2008| 1   | 425        |  3  |  516       |  4  |    688

任何帮助将不胜感激

【问题讨论】:

  • 我也有多个日期(数百个)

标签: sql sql-server-2008 pivot


【解决方案1】:

这里是多列的动态数据透视

Declare @SQL varchar(max) 
Set @SQL = Stuff((Select  Distinct ',' +QuoteName(concat('Mob_',Date))+' as Mob,'+QuoteName(Date)
                   From   Yourtable 
                   Order by 1 
                   For XML Path('')),1,1,'') 

Select  @SQL = '
Select [Herd],[Tag],[Byr],' + @SQL + '
From (
        Select [Herd],[Tag],[Byr]
              ,B.* 
        From  YourTable A
        Cross Apply (
                     Values (concat(''Mob_'',A.Date),cast(A.Mob as nvarchar(50)))
                           ,(concat('''',A.Date)    ,cast(A.Value as nvarchar(50)))
                    ) B (Item,Value)
     ) A
Pivot (max([Value]) For [Item] in (' + Replace(@SQL,' as Mob','') + ') ) p'

Exec(@SQL);

退货

编辑

2014 年更新... Concat() 和值

编辑 2:

转换 nvarchar(50) 的另一个选项,您可以使用 format()。例如:

             Values (concat(''Mob_'',A.Date),Format(A.Mob,''0''))
                   ,(concat('''',A.Date)    ,Format(cast(A.Value as decimal(18,2)),''#,##0.00''))
            ) B (Item,Value)

【讨论】:

  • 所以我的表被称为“Trait”,所以我需要用 trait 替换 YourTable?
  • @proctor 澄清一下,您使用的是上面列出的代码吗?即不是以前的版本
  • 是的,我已经复制了您的代码 - 我正在运行 SQL Server 2014
  • @proctor 你标记了 2008。我会使用 concat() 和 values 而不是 Union All。你想要改变吗?
  • 是的,对不起,约翰 - 如果可以的话
猜你喜欢
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
相关资源
最近更新 更多