0

編集:

私は 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');
4

3 に答える 3