2016-04-12 6 views
0

マイテーブル(「アクション」)を記録構造&記録以下の通りです:SQL Serverの - バックログが

:上記の[アクション]テーブルに基づいて

Action_ID Open_date   Close_date 
---------  -----------------------   ----------------------- 
ACT1001  2015-06-18 03:58:08.000  NULL 
ACT1002  2015-06-28 06:01:10.000  2015-06-30 10:11:21.000 
ACT1003  2015-07-08 01:40:19.000  2015-07-09 00:29:53.000 
ACT1004  2015-07-09 04:32:00.000  NULL 
ACT1005  2015-07-08 21:56:20.000  2015-07-09 01:12:37.000 
ACT1006  2015-07-16 17:45:56.000  2015-08-15 23:24:35.000    
ACT1007  2015-08-05 17:54:25.000  NULL 
ACT1008  2015-08-30 08:29:57.000  2015-08-30 22:11:45.000 
ACT1009  2015-08-28 04:17:42.000  2015-09-11 21:39:11.000    
ACT1010  2015-09-16 07:00:01.000  2015-09-16 19:11:29.000 

、私は以下のように行列(カウント)のレポートを開発

YEAR MONTH BACKLOG OPENED_ACTIONS CLOSED_ACTIONS STILL_OPEN 
---- ----- ------- -------------- -------------- ---------- 
2015 6 0 2  1  1 
2015 7 1 4  2  3 
2015 8 3 3  2  4 
2015 9 4 1  2  3 

今、毎月&ごとにBACKLOGレコードを検索しようとしています。 私の結果は以下のようになります。

YEAR MONTH BACKLOG_ACTIONS 
---- ----- --------------- 
2015 6 NULL    
2015 7 ACT1002   
2015 8 ACT1002 
2015 8 ACT1004 
2015 8 ACT1006   
2015 9 ACT1002 
2015 9 ACT1004 
2015 9 ACT1007 
2015 9 ACT1009 

誰かがMS SQL Serverを使用して上記の結果のためのSQLを書いて私を助けることができますか?

ありがとうございます。

+0

ここから始めましょう。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

+0

@rupa質問にあなたが試したことを含めるようにしてください遠い – haakym

答えて

1
/* 
1) Load the activity months to a cte. MONTHNUM codes for reporting over calender years 
2) Join the open actions 
note:- if there is no activity in a calender month the output will not 
produce anything for that month. 
If you have a dates table in your DB it might be better to use that as 
the driver rather than ACTIONS. 
*/ 

;WITH CTE AS 
(
SELECT YEAR(OPEN_DATE) CCYY, MONTH(OPEN_DATE) MM,YEAR(OPEN_DATE) * 12 + MONTH(OPEN_DATE) MONTHNUM 
FROM ACTIONS 
GROUP BY yEAR(OPEN_DATE),MONTH(OPEN_DATE),YEAR(OPEN_DATE) * 12 + MONTH(OPEN_DATE) 
) 
SELECT CCYY,MM,MONTHNUM,A.* 
FROM CTE 
LEFT JOIN ACTIONS A ON YEAR(A.OPEN_DATE) * 12 + MONTH(A.OPEN_DATE) < MONTHNUM 
WHERE A.CLOSE_DATE IS NULL 
+0

ありがとうございました。それはうまくいった。 – Rupa