2012-04-20 32 views
0

我有一個有四列的表; Plant_Id,Year,Month和MR。我希望能夠計算MR的範圍(月份2月差異)。 表(MaintenanceRatebepaen是表名)的樣品看起來是這樣的:顯示「上一行」和新列中的列值

Plant_ID Year Month MR 
CCAR  2009 1 0,706452 
CCAR  2009 2 0,625899 
CCAR  2009 3 0,636678 
CCAR  2009 4 0,736544 
CCAR  2009 5 0,552023 
CCAR  2009 6 0,418338 
CCAR  2009 7 0,502732 
CCAR  2009 8 0,64526 
CCAR  2009 9 0,743333 
CCAR  2009 10 0,555556 
CCAR  2009 11 0,297561 
CCAR  2009 12 0,338608 
CCAR  2010 1 0,380783 
Etc. 

我不知道這是興趣,但Plant_id可以有25米不同的價值觀,從2008年歲月 - 2012年1月-12,MR是計算值。

查詢看起來是這樣的:

SELECT Plant_Id, Jaar, Maand 
    , (SUM(Compl) + 0.000)/SUM(Total) AS MR 
FROM (
     SELECT Plant_Id, Jaar, Late, EarlyJobs, OnTimeJobs, Maand 
      , SUM(EarlyJobs + OnTimeJobs) AS Compl 
      , SUM(EarlyJobs) + SUM(Late) + SUM(OnTimeJobs) AS Total 
     FROM MaintenanceRatebepaen AS MaintenanceRatebepaen_1 
     GROUP BY Plant_Id, Jaar, Maand, Late, OnTimeJobs, EarlyJobs 
    ) AS MaintenanceRatebepaen 
WHERE (Jaar >= 2009) AND (Jaar <= 2011) AND (Plant_Id = 'CCAR') 
GROUP BY Jaar, Plant_Id, Maand 
ORDER BY Plant_Id, Jaar, Maand 

我是新的SQL,我設法從書本上得到上面和谷歌搜索。但我無法獲得計算出的範圍,非常感謝任何幫助!

+0

你到底在找什麼? MR在當前月份和上個月之間有差異嗎? – Tobsey 2012-04-20 11:21:08

回答

1

你只是想要一個月一個月的差異?

數據

declare @data table (PlantId nvarchar(5), [Year] nvarchar(4), [Month] int, MR decimal(10,10)) 

INSERT @data VALUES 
('CCAR','2009','1','0.706452'),('CCAR','2009','2','0.625899'),('CCAR','2009','3','0.636678'),('CCAR','2009','4','0.736544'),('CCAR','2009','5','0.552023'),('CCAR','2009','6','0.418338'),('CCAR','2009','7','0.502732'),('CCAR','2009','8','0.64526'),('CCAR','2009','9','0.743333'),('CCAR','2009','10','0.555556'),('CCAR','2009','11','0.297561'),('CCAR','2009','12','0.338608'),('CCAR','2010','1','0.380783') 

查詢

;with cte as (
    SELECT *, ROW_NUMBER() OVER (ORDER BY Year DESC, Month DESC) AS RowNumber FROM @data 
) 
select d1.PlantId 
    , d1.Year 
    , d1.Month 
    , d1.MR 
    , d1.MR-d2.MR AS [ChangeMRFromPreviousMonth] 
from cte d1 
LEFT OUTER JOIN cte d2 
    on d2.RowNumber = (d1.RowNumber+1) 
order by d1.RowNumber DESC 

結果:

PlantId Year Month  MR          ChangeMRFromPreviousMonth 
------- ---- ----------- --------------------------------------- --------------------------------------- 
CCAR 2009 1   0.7064520000       NULL 
CCAR 2009 2   0.6258990000       -0.0805530000 
CCAR 2009 3   0.6366780000       0.0107790000 
CCAR 2009 4   0.7365440000       0.0998660000 
CCAR 2009 5   0.5520230000       -0.1845210000 
CCAR 2009 6   0.4183380000       -0.1336850000 
CCAR 2009 7   0.5027320000       0.0843940000 
CCAR 2009 8   0.6452600000       0.1425280000 
CCAR 2009 9   0.7433330000       0.0980730000 
CCAR 2009 10   0.5555560000       -0.1877770000 
CCAR 2009 11   0.2975610000       -0.2579950000 
CCAR 2009 12   0.3386080000       0.0410470000 
CCAR 2010 1   0.3807830000       0.0421750000 

是你需要什麼?你的查詢包含很多額外的列,所以我不知道你是否想要包括?

*編輯* 作爲對您的意見的迴應,您需要將您的查詢放入CTE中,並添加額外的RowNumber列。 d1和d2只是該CTE的別名。我認爲這應該這樣做:

;with cte as (
    SELECT Plant_Id, Jaar, Maand 
     , (SUM(Compl) + 0.000)/SUM(Total) AS MR 
     , ROW_NUMBER() OVER (ORDER BY Jaar DESC, Maand DESC) AS RowNumber 
    FROM (
     SELECT Plant_Id, Jaar, Late, EarlyJobs, OnTimeJobs, Maand 
      , SUM(EarlyJobs + OnTimeJobs) AS Compl 
      , SUM(EarlyJobs) + SUM(Late) + SUM(OnTimeJobs) AS Total 
     FROM MaintenanceRatebepaen AS MaintenanceRatebepaen_1 
     GROUP BY Plant_Id, Jaar, Maand, Late, OnTimeJobs, EarlyJobs 
    ) AS MaintenanceRatebepaen 
    WHERE (Jaar >= 2009) AND (Jaar <= 2011) AND (Plant_Id = 'CCAR') 
    GROUP BY Jaar, Plant_Id, Maand 
    ORDER BY Plant_Id, Jaar, Maand 
) 
select d1.PlantId 
    , d1.Jaar 
    , d1.Maand 
    , d1.MR 
    , d1.MR-d2.MR AS [ChangeMRFromPreviousMonth] 
from cte d1 
LEFT OUTER JOIN cte d2 
    on d2.RowNumber = (d1.RowNumber+1) 
order by d1.RowNumber DESC 
+0

非常感謝!那正是我需要的!還有一個問題(我是SQL新手......):如何將代碼插入到查詢中?我嘗試了,但是我得到了一些錯誤....(未知列名)我是否正確理解你創建了一個'臨時'表,你加入了'一個關閉'?並用它來計算MR變化? – Benne 2012-04-23 07:36:33

+0

我想我的問題是:我還需要「創建」哪個表(cte,d1,d2)。我的'MaintenannceRatebepaen'表是否正確?所以我需要創建'd1'和'd2'?我可以將其插入到我現有的查詢中嗎?再次感謝提前!非常感謝您的幫助。 – Benne 2012-04-23 07:49:31

+0

請參閱我編輯的答案。如果我的答案是有用的,你可以upvote它/標記爲接受,因爲它可以幫助我們所有人:o) – Paddy 2012-04-23 08:11:39