編集:
私は Sql Server 2005 で作業しており、現在の会計年度 (6 月 1 日から 5 月 30 日まで) と過去 3 年間の個別のユーザー数 (YOY) を取得しようとしています。selectステートメントを4回実行することで必要なことを実行できますが、現時点ではより良い方法を見つけることができないようです. 1 回のクエリで毎年の個別のカウントを取得できますが、個別の累積カウントが必要です。以下は、私がこれまでに持っているもののモックアップです。
SELECT [年], COUNT(DISTINCT UserID) から ( u.uID をユーザー ID として選択し、 場合 WHEN dd.ddEnd BETWEEN @yearOneStart AND @yearOneEnd THEN 'Year1' WHEN dd.ddEnd BETWEEN @yearTwoStart AND @yearTwoEnd THEN 'Year2' WHEN dd.ddEnd BETWEEN @yearThreeStart AND @yearThreeEnd THEN 'Year3' WHEN dd.ddEnd BETWEEN @yearFourStart AND @yearFourEnd THEN 'Year4' ELSE 'その他' END AS [年] FROM ユーザー AS u INNER JOIN UserDataIDMatch AS udim オン u.uID = uim.udim_FK_uID INNER JOIN DataDump AS dd ON udim.udimUserSystemID = dd.ddSystemID ) AS データ WHERE LOWER([年]) 'その他' グループ化 [年]
私は次のようなものを得ます:
年1 1 年 2 1 年3 1 年4 1
しかし、私は本当に必要です:
年1 1 年 2 2 3年目 3 年4 4
以下は、大まかなスキーマと値のセットです (簡略化のために更新されています)。SQL Fiddle を作成しようとしましたが、スキーマを構築しようとするとディスク容量エラーが発生します。
CREATE TABLE ユーザー ( uID int ID 主キー、 uFirstName varchar(75), uLastName varchar(75) ); INSERT INTO ユーザー (uFirstName、uLastName) 値 ('User1', 'User1'), ('ユーザー 2'、'ユーザー 2') ('User3', 'User3') ('User4', 'User4'); CREATE TABLE UserDataIDMatch ( udimID int indentity 主キー、 uim.udim_FK_uID int 外部キー参照ユーザー (uID)、 uimUserSystemID varchar(75) ); INSERT INTO UserDataIDMatch (udim_FK_uID、udimUserSystemID) 値 (1、「システムID1」)、 (2、「システムID2」)、 (3、「SystemID3」)、 (4、'SystemID4'); CREATE TABLE データダンプ ( ddID int ID 主キー、 ddSystemID varchar(75), ddEnd 日時 ); INSERT INTO DataDump (ddSystemID、ddEnd) 値 ('SystemID1', '10-01-2013'), ('SystemID2', '10-01-2014'), ('SystemID3', '10-01-2015'), ('SystemID4', '10-01-2016');