Necesito crear una vista: está compuesta por cinco declaraciones UNION ALL. La diferencia entre cada instrucción es que los datos es el filtro por diferente período:T-SQL Use CTE para inicializar variables dentro de una vista
Por ejemplo:
SELECT RecordName
,CASE
WHEN RecordDate > DATEADD(WEEK,-1,GETUTCDATE()) THEN 'This week'
END
UNION ALL
SELECT RecordName
,CASE
WHEN RecordDate > DATEADD(WEEK,-2,GETUTCDATE()) THEN 'Previos week'
END
SELECT RecordName
,CASE
WHEN RecordDate > DATEADD(Year,-1,GETUTCDATE()) THEN 'Year ago'
END
Entonces estoy creando un pivote mediante la vista.
De todos modos, la condición de "fecha" se calcula de una manera más compleja. También estoy usando la función GETUTCDATE() y esto devolverá un valor diferente en milisegundos.
Es por eso que quiero usar una expresión CTE para inicializar todas las variables de condición de fecha o hacer los cálculos solo una vez en el CTE, y luego usar estas condiciones de fecha en la cláusula SELECT-UNION.
El problema es que no puedo unir la información del CTE con la instrucción SELECT a continuación y cuando intento utilizar las condiciones de fecha directamente (sin unirme) no funciona ("Error - Nombre de columna no válido")
Este es un ejemplo de lo que estoy tratando de hacer:
WITH DatePeriods(ThisWeek,LastWeek,MonthToDate,QuarterToDate,YearToDate) AS
(
SELECT DATEADD(WEEK,-1,GETUTCDATE()) AS ThisWeek
,... AS LastWeek
,... AS MonthToDate
,... AS QuarterToDate
,DATEADD(YEAR,-1,GETUTCDATE()) AS YearToDate
)
SELECT RecordName
,CASE
WHEN RecordDate > ThisWeek THEN 'This week'
END
UNION ALL
SELECT RecordName
,CASE
WHEN RecordDate > LastWeek THEN 'Previos week'
END
SELECT RecordName
,CASE
WHEN RecordDate >YearToDate THEN 'Year ago'
END
Debe usar el CTE en la cláusula from de cada consulta. Puedes hacerlo con un 'cross apply'. –
Muchas gracias. Ese es el trabajo perfecto. Por favor, publique su respuesta para marcar la pregunta como cerrada. – gotqn