I am generating a cross table where I show the operators and every day of the week with the number of tickets they attended per day, in this case I am creating a function that receives a date parameter and calculates each day of the week for so generate my table.
CREATE PROCEDURE sp_reporteSemana @FECHA DATE
AS
DECLARE @INICIO_SEMANA AS DATE
DECLARE @MARTES AS DATE
DECLARE @MIERCOLES AS DATE
DECLARE @JUEVES AS DATE
DECLARE @VIERNES AS DATE
DECLARE @SABADO AS DATE
DECLARE @FIN_SEMANA AS DATE
SET @INICIO_SEMANA = CAST(DATEADD(wk, DATEDIFF(wk, 0, @FECHA), 0) AS DATE)
SET @MARTES = DATEADD(DAY, 1, @INICIO_SEMANA)
SET @MIERCOLES = DATEADD(DAY, 2, @INICIO_SEMANA)
SET @JUEVES = DATEADD(DAY, 3, @INICIO_SEMANA)
SET @VIERNES = DATEADD(DAY, 4, @INICIO_SEMANA)
SET @SABADO = DATEADD(DAY, 5, @INICIO_SEMANA)
SET @FIN_SEMANA = CAST(DATEADD(wk, DATEDIFF(wk, 0, @FECHA), 6) AS DATE)
SELECT CODIGO
,OPERARIO
,[@INICIO_SEMANA] AS LUNES
,[@MARTES] AS MARTES
,[@MIERCOLES] AS MIERCOLES
,[@JUEVES] AS JUEVES
,[@VIERNES] AS VIERNES
,[@SABADO] AS SABADO
,[@FIN_SEMANA] AS DOMINGO
FROM (
SELECT a.OPER_CODIGO CODIGO
,a.OPER_NOMBRE + ' ' + a.OPER_APEPATER + ' ' + a.OPER_APEMATER OPERARIO
,CAST(c.TCKT_FFINAL AS DATE) FECHAS
,COUNT(b.TCKT_NUMERO) CANTIDAD
FROM OPERARIO a
INNER JOIN BITACORA b ON a.OPER_CODIGO = b.OPER_CODIGO
INNER JOIN TICKET c ON b.TCKT_NUMERO = c.TCKT_NUMERO
WHERE CAST(c.TCKT_FFINAL AS DATE) BETWEEN @INICIO_SEMANA
AND @FIN_SEMANA
GROUP BY a.OPER_CODIGO
,a.OPER_NOMBRE + ' ' + a.OPER_APEPATER + ' ' + a.OPER_APEMATER
,CAST(c.TCKT_FFINAL AS DATE)
) z
PIVOT(SUM(CANTIDAD) FOR FECHAS IN (
[@INICIO_SEMANA]
,[@MARTES]
,[@MIERCOLES]
,[@JUEVES]
,[@VIERNES]
,[@SABADO]
,[@FIN_SEMANA]
)) AS pvt
ORDER BY pvt.CODIGO ASC
GO
When executing my procedure, SQL throws me the following error:
Mens 8114, Level 16, State 1, Procedure sp_reporteSemana, Line 35 Error converting nvarchar data type to date. Mens 473,
Level 16, State 1, Procedure sp_reporteSemana, Line 35 It has been provided the incorrect value "@STONE_SEMANA" in the operator PIVOT.
The tables are the following
Where:
I enclose the script:
It's a bit long that's why I uploaded it to my Drive.