Potrzebuję utworzyć widok - składa się on z pięciu instrukcji UNION ALL. Różnica między każdym stwierdzeniem jest to, że dane są przez filtr innym okresie:T-SQL Użyj CTE do zainicjowania zmiennych w widoku
Na przykład:
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
Następnie tworzę sworzeń użyciu widoku.
W każdym razie warunek "data" jest obliczany w bardziej złożony sposób. Używam również funkcji GETUTCDATE(), która zwróci inną wartość o milisekundę.
Dlatego chcę użyć wyrażenia CTE, aby zainicjować wszystkie zmienne warunków daty lub wykonać obliczenia tylko raz w CTE, a następnie użyć tych warunków daty w klauzuli SELECT-UNION.
Problem polega na tym, że nie jestem w stanie dołączyć do informacji z CTE za pomocą poniższej instrukcji SELECT, a kiedy spróbuję użyć warunków daty bezpośrednio (bez łączenia), to nie działa ("Błąd - Niepoprawna nazwa kolumny").
Jest to przykład tego, co próbuję zrobić:
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
Musisz użyć CTE w klauzuli from każdego zapytania. Możesz to zrobić za pomocą opcji "Zastosuj krzyż". –
Dziękuję bardzo. To jest perfekcyjna praca. Proszę napisać odpowiedź, aby oznaczyć pytanie jako zamknięte. – gotqn