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 つの異なる結果が得られます。誰かが私が間違っていること、どのクエリ、または両方のクエリで教えてもらえますか?
よろしくお願いします!