1

使用 SQL Server 2008 Management Studio、C#.NET4.5、Winforms。

我已经坚持了一段时间。

我有两个疑问,第一个:

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是一个具有0,1,2,3,4,5的int

现在,当我得到结果时,对于零件号的第一个查询,可以说“测试零件”

我得到854作为总数。

当我运行第二个查询时,我得到了分解,我得到以下结果:

136, 142, 150, 144, 105, 149 = *826*

所以从同一个数据源我得到了两个不同的结果。有人可以告诉我我做错了什么,在哪个查询中,甚至在两个查询中?

提前谢谢各位!

4

1 回答 1

0

嗯,这是两个原因,第一个是@meherzad 捡到的,我有 1st -6 然后我有 0-5 在第二个查询中。

然后另一个原因是第一个查询实际上并没有更新我的表,任何没有得到结果,这是由于月()>月()没有工作,所以我删除了这个,它现在似乎可以工作了。

多谢你们!

于 2013-04-26T12:10:25.777 回答