1

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

私はしばらくこれにこだわっています。

私は2つのクエリを持っています.1つ目:

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 か月の売上を部品番号ごとに集計したものです。

次は 2 番目のクエリです。

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になります。

2 番目のクエリを実行すると、内訳が表示され、次の結果が得られます。

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

したがって、同じデータ ソースから2 つの異なる結果が得られます。誰かが私が間違っていること、どのクエリ、または両方のクエリで教えてもらえますか?

よろしくお願いします!

4

1 に答える 1

0

それは2つの理由でした.1つ目は@meherzadによって取り上げられ、1つ目は-6で、2つ目のクエリでは0-5でした。

次に、最初のクエリが実際にテーブルを更新していなかったため、結果が得られませんでした。これは月()>月()が機能していないため、これを削除しました。現在は機能しているようです。

みんなありがとう!

于 2013-04-26T12:10:25.777 に答える