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个月,@time是INT,将有0,1,2,3,4,5。
现在,当我得到的结果反馈,对号码中的第1 查询可以说“测试部分”。
我得到作为总数。
当我运行第二查询我得到向下突破我得到如下结果:
136, 142, 150, 144, 105, 149 = *826*
从我得到
两种不同的结果同一数据源
左右。有人能告诉我我做错了什么,在哪个查询中,甚至是两个查询?
在此先感谢,伙计们!
变量'@ time'在2查询中的值为0到5,而在1查询中你已经硬编码值为6.我认为你应该使用1到6 ... – Meherzad 2013-04-26 11:48:48
令人惊讶的是,我没有注意到,更惊奇它没有改变结果.....多数民众赞成在这很奇怪 – lemunk 2013-04-26 11:54:25
你有未来的销售? SELECT MAX([DATETIME])FROM ILines'返回什么? – Quassnoi 2013-04-26 11:55:57