Tôi cần tạo một khung nhìn - nó được tạo thành bởi năm câu lệnh UNION ALL. Sự khác biệt giữa mỗi câu lệnh là dữ liệu được lọc theo thời gian khác nhau:T-SQL Sử dụng CTE để khởi tạo các biến bên trong một khung nhìn
Ví dụ:
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
Sau đó, tôi đang tạo ra một trục sử dụng giao diện.
Dù sao, điều kiện "ngày" được tính theo cách phức tạp hơn. Tôi đang sử dụng hàm GETUTCDATE() và điều này sẽ trả về giá trị khác nhau bất kỳ mili giây nào. Đó là lý do tại sao tôi muốn sử dụng một biểu thức CTE để khởi tạo tất cả các biến điều kiện ngày hoặc để thực hiện các phép tính một lần duy nhất trong CTE, và sau đó sử dụng điều kiện ngày này trong mệnh đề SELECT-UNION.
Vấn đề là, tôi không thể tham gia thông tin từ CTE với câu lệnh SELECT bên dưới và khi tôi cố gắng sử dụng điều kiện ngày trực tiếp (không tham gia) nó không hoạt động ("Lỗi - Tên cột không hợp lệ").
Đây là một ví dụ về những gì tôi đang cố gắng để làm:
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
Bạn phải sử dụng CTE trong mệnh đề từ của mỗi truy vấn. Bạn có thể làm điều đó với một 'áp dụng chéo'. –
Cảm ơn bạn rất nhiều. Đó là công việc hoàn hảo. Vui lòng đăng câu trả lời của bạn để đánh dấu câu hỏi là đã đóng. – gotqn