在动态SQL Server上将字符串与列名连接

时间:2017-11-10 15:21:32

标签: sql sql-server tsql

今天我正在研究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语句,它将关键时刻转移到一周,并将它们与一周中的某一天联系起来。很抱歉,如果某些格式错误,我在这里很新,并提前感谢。

0 个答案:

没有答案