5
ビューを作成する必要があります。ビューは5つのUNION ALLステートメントで構成されています。例えばT-SQL CTEを使用してビュー内の変数を初期化する
:
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
は、その後、私はビューを使用してピボットを作成していた各ステートメントの違いは、データが異なる期間によってフィルタであることです。
とにかく、「日付」条件はより複雑な方法で計算されます。私はGETUTCDATE()関数も使用していますが、これはミリ秒ごとに異なる値を返します。
これは、すべての日付条件変数を初期化したり、CTEで1回だけ計算を実行したり、SELECT-UNION句でこの日付条件を使用するために、CTE式を使用したいのです。
問題はCTEの情報を以下のSELECTステートメントで結合することができず、日付条件を直接(ジョインなしで)使用しようとしたときに機能していない(「エラー - 無効な列名」です) )。
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
各クエリのfrom句でCTEを使用する必要があります。あなたは 'クロス適用'でそれを行うことができます。 –
ありがとうございます。それは完璧な仕事です。 質問を閉じたと記入するために回答を投稿してください。 – gotqn