SQL 服务器 PIVOT 多个日期
SQL Server PIVOT multiple dates
您好,我的数据在 table 中,如下所示:
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
如有任何帮助,我们将不胜感激
这是多列的动态数据透视表
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);
Returns
EDIT
2014 年更新...Concat() 和值
EDIT 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)
您好,我的数据在 table 中,如下所示:
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
如有任何帮助,我们将不胜感激
这是多列的动态数据透视表
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);
Returns
EDIT
2014 年更新...Concat() 和值
EDIT 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)