2014-02-27 64 views
0

我有一個表,看起來像分區由當空

Year Month ID  Date  Status 
-------------------------------------- 
2013 8 99999 8/1/2013 Status A 
2013 9 99999 NULL  NULL 
2013 10 99999 NULL  NULL 
2013 11 99999 NULL  NULL 
2013 12 99999 NULL  NULL 
2014 1 99999 NULL  NULL 
2014 2 99999 2/5/2014 Status B 
2014 3 99999 NULL  NULL 
2014 4 99999 NULL  NULL 
2014 5 99999 NULL  NULL 
2014 6 99999 NULL  NULL 
2014 7 99999 NULL  NULL 

我想增加一列,這將使我的狀態數量,重複,直到的狀態下一次出現,它會增加1.

結果:

Year Month ID  Date  Status Value 
-------------------------------------------- 
2013 8 99999 8/1/2013 Status A 1 
2013 9 99999 NULL  NULL  1 
2013 10 99999 NULL  NULL  1 
2013 11 99999 NULL  NULL  1 
2013 12 99999 NULL  NULL  1 
2014 1 99999 NULL  NULL  1 
2014 2 99999 2/5/2014 Status B 2 
2014 3 99999 NULL  NULL  2 
2014 4 99999 NULL  NULL  2 
2014 5 99999 NULL  NULL  2 
2014 6 99999 NULL  NULL  2 
2014 7 99999 NULL  NULL  2 

的NULL是什麼扔我了...感謝您的幫助!

編輯:

這裏是我當前的查詢:

DECLARE @DateStart DATETIME 
DECLARE @DateEnd DATETIME 

SET @DateStart = '8/1/2013' 
SET @DateEnd = '7/1/2014' 

SELECT  
    P.Year, P.Month, P.ID, 
    PP.MaxStatusDate, 
    Status 
FROM  
    (SELECT  
     * 
    FROM  
     (SELECT DISTINCT 
      year, Month 
     FROM  
      lu_Calendar 
     WHERE  
      Date BETWEEN @DateStart AND @DateEnd) AS A 
    CROSS JOIN 
     (SELECT DISTINCT 
      ID 
      FROM 
      dbo.StatusChangeData) AS B 
    ) AS P 
LEFT JOIN 
    (SELECT 
     yr, mnth, MaxStatusDate, Status, A.ID 
    FROM  
     (SELECT  
      ID, YEAR([ModifiedDate]) AS yr, 
      MONTH(ModifiedDate) AS mnth, 
      MAX([ModifiedDate]) AS MaxStatusDate 
     FROM  
      dbo.StatusChangeData 
     GROUP BY 
      ID, YEAR([ModifiedDate]), MONTH(ModifiedDate)) AS A 
INNER JOIN 
    dbo.StatusChangeData sce ON sce.ID = A.ID AND A.MaxStatusDate = sce.[ModifiedDate] 
) AS PP ON P.Month = pp.mnth AND P.YEAR = PP.yr AND P.ID = PP.ID 
WHERE  
    P.ID = 99999 
+0

能否請您發表您的當前查詢? – abhi

+0

我已編輯帖子以包含查詢 – Pops

回答

0

您可以使用相關子查詢做到這一點。從本質上講,這種計數不可─NULL值的數目任何給定值前:

select scd.*, 
     (select count(*) 
     from StatusChangeData scd2 
     where scd2.id = scd.id and 
       scd2.status is not null and 
       scd2.year*100+scd2.month <= scd.year*100+scd.month 
     ) as value 
from StatusChangeData scd; 
+0

這會在新年開始時導致「值」變爲2,但如果您注意到,狀態會在2014年2月更改,以便下一個數字需要時發生。它不能依賴年份或月份,因爲這些參數可能會發生變化。 – Pops

+0

@Pops。 。 。我現在看到你在說什麼。比較中有一個錯字。 'scd2'的年份和月份應該與'scd'的年份和月份進行比較,並且表達式現在是固定的。 –

+0

輝煌。謝謝。 – Pops