2013-04-26 63 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()不起作用,所以我删除了它,现在它已成为加工。

谢谢你们!

相关问题