Ho bisogno di creare una vista - è composta da cinque istruzioni UNION ALL. La differenza tra ogni istruzione è che i dati è il filtro per periodo differente:T-SQL Usa CTE per inizializzare le variabili all'interno di una vista
Ad esempio:
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
Poi sto creando un perno utilizzando la visualizzazione.
In ogni caso, la condizione di "data" viene calcolata in modo più complesso. Sto usando anche la funzione GETUTCDATE() e questo restituirà un valore diverso ogni millisecondo.
Ecco perché voglio utilizzare un'espressione CTE per inizializzare tutte le variabili di condizione data o per eseguire i calcoli una sola volta nel CTE e quindi per utilizzare le condizioni di data nella clausola SELECT-UNION.
Il problema è che non sono in grado di unire le informazioni dal CTE con l'istruzione SELECT in basso e quando provo a utilizzare direttamente le condizioni della data (senza join) non funziona ("Errore - Nome colonna non valido").
Questo è un esempio di quello che sto cercando di fare:
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
È necessario utilizzare il CTE nella clausola from di ogni query. Puoi farlo con un 'cross apply '. –
Grazie mille. Questo è un lavoro perfetto. Si prega di inviare la risposta per contrassegnare la domanda come chiusa. – gotqn