2013-04-26 52 views
1

使用SQL Server 2008 Management Studio,C#.NET4.5,Winforms。SQL:最近6個月的數據,不同的結果

我一直堅持這一段時間。

我有兩個疑問,第一:

ALTER PROCEDURE [dbo].[Last6MonthSales] 
AS 
    DELETE FROM dbo.Sales6months 

    INSERT INTO dbo.Sales6months 
    SELECT Part, SUM(COALESCE(dbo.iLines.Qty, 0)) as qty 
    FROM dbo.IHeads 
    LEFT JOIN dbo.Ilines ON dbo.Iheads.document = dbo.Ilines.document 
    WHERE dbo.IHeads.prefix = 'i' 
     AND month([ILines].[datetime]) > month(dateadd(month, datediff(month, 0, (SELECT max([DATETIME]) FROM ILines)) - 6, 0)) 
     AND year([ILines].[datetime]) > year(dateadd(month, datediff(month, 0, (SELECT max([DATETIME]) FROM ILines)) - 6, 0)) 

這一個,你能告訴我得過去6個月的銷售爲計數每個部分號。

下一個是我的第二個查詢:

ALTER PROCEDURE [dbo].[q6MonthsHistory] 
    @part as varchar(55), 
    @time as int 
AS 
    SELECT SUM(Qty) as qty 
    FROM 
     ilines 
    RIGHT JOIN 
     IHeads ON dbo.Iheads.document = dbo.Ilines.document 
    WHERE 
     Part = @part 
     AND month(ilines.[datetime]) = month(dateadd(month, datediff(month, 0, (SELECT max([DATETIME]) FROM ILines)) - @time, 0)) 
     AND year(ilines.[datetime]) = year(dateadd(month, datediff(month, 0, (SELECT max([DATETIME]) FROM ILines)) - @time, 0)) 

正如你所看到的這個人是得到擊穿過去6個月,@timeINT,將有0,1,2,3,4,5

現在,當我得到的結果反饋,對號碼中的第1 查詢可以說「測試部分」

我得到作爲總數。

當我運行第二查詢我得到向下突破我得到如下結果:

136, 142, 150, 144, 105, 149 = *826* 
從我得到 兩種不同的結果同一數據源

左右。有人能告訴我我做錯了什麼,在哪個查詢中,甚至是兩個查詢?

在此先感謝,夥計們!

+1

變量'@ time'在2查詢中的值爲0到5,而在1查詢中你已經硬編碼值爲6.我認爲你應該使用1到6 ... – Meherzad 2013-04-26 11:48:48

+0

令人驚訝的是,我沒有注意到,更驚奇它沒有改變結果.....多數民衆贊成在這很奇怪 – lemunk 2013-04-26 11:54:25

+0

你有未來的銷售? SELECT MAX([DATETIME])FROM ILines'返回什麼? – Quassnoi 2013-04-26 11:55:57

回答

0

嗯,這是兩個原因,第一次被@meherzad拿走了我有第一個-6,然後我在第二個查詢0-5。

然後另一個原因是第一個查詢實際上並沒有更新我的表,任何沒有得到結果,這是因爲月()> month()不起作用,所以我刪除了它,現在它已成爲加工。

謝謝你們!