在SQL中的列标题中转换行数据(日期)

时间:2018-12-12 10:14:34

标签: sql-server sql-server-2012

您好朋友我正在尝试用列标题中的日期转换行数据 这是我的sql AttenanceData表

普通表 Original Data

我想将行日期转换成这样的列标题

移调 enter image description here

有人可以告诉我如何在sql中做到这一点

我可以肯定地使用枢轴

所以我尝试了sql查询来实现

<modules>
    <module>module1</module>
    <module>module2</module>
    <module>module3</module>
    <module>module4</module>
    <module>module5</module>
    <module>module6</module>
</modules> 

1 个答案:

答案 0 :(得分:0)

我尝试使用动态数据透视表

用于生成数据的示例脚本:

create table #a
(
  entrprise_id varchar(50),
  datee date,
  attendance varchar(10)
)

insert into #a values
('james','2018-12-22','p'),
('james','2018-12-23','p'),
('pick','2018-12-23','p'),
('rick','2018-12-23','p'),
('pick','2018-12-22','p'),
('rick','2018-12-22','p')

PIVOT查询:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.datee) 
            FROM #a c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT entrprise_id, ' + @cols + ' from 
            (
                select*
                from #A
           ) x
            pivot 
            (
                 max(attendance)
                for datee in (' + @cols + ')
            ) p '


execute(@query)

select *
from
(
  select *
  from #A
) src
pivot
(
  max(attendance)
  for datee in ([2018-12-22], [2018-12-23])
) piv