今天我正在研究SQL Server上的这个表(table_1):
Id_Escenario Tienda Trabajador Semana Horas Contrato Lunes_Turno
1 1 1 1 44 08:30-18:00
1 1 1 2 44 08:30-18:00
1 1 1 3 44 08:30-18:00
我希望将“Semana”列旋转到这样一个表:
id_escenario tienda trabajador horas contrato 1 2 3
1 1 1 44 08:30-18:00 08:30-18:00 08:30-18:00
我在动态SQL上这样做,所以我不需要手工编写所有周(Semana)的硬编码。第一个表可能有2周或更长时间。我到目前为止所使用的代码如下:
declare @sql as nvarchar(2000);declare @col as nvarchar(2000);
select @col = isnull(@col + ',', '') + quotename([Semana])
from (select distinct [Semana] from [dbo].[Resultados_Turnos_Final]) as
tabla;
set @sql =N'
select id_escenario,tienda,trabajador,[horas contrato],' + @col +
'from (select id_escenario,tienda,trabajador,semana,[horas contrato],
[Lunes_Turno] from [dbo].[table_1]) a
pivot(max([Lunes_Turno]) for semana IN (' + @col + ')) AS pvtSemana
';
exec sp_executesql @sql;
我想在星期一(Lunes)连接到每周从1到3的一周,得到这样的东西(这是我无法完成的部分):
id_escenario tienda trabajador horas contrato Lunes_Turno_1 Lunes_Turno_2 Lunes_Turno_3
1 1 1 44 08:30-18:00 08:30-18:00 08:30-18:00
我想这样做是为了创建一个动态的SQL语句,它将关键时刻转移到一周,并将它们与一周中的某一天联系起来。很抱歉,如果某些格式错误,我在这里很新,并提前感谢。