2013-04-26 3 views
1

Использование SQL Server 2008 Management Studio, C# .NET4.5, Winforms.SQL: последние 6 месяцев данные, разные результаты

Я застрял на этом некоторое время.

У меня есть два запроса, 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 месяцев продаж в качестве подсчета для каждая часть номер.

Следующая один мой второй запрос:

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.

Теперь, когда я получаю результаты обратно, для запроса на номер детали позволяет сказать «тест часть».

Я получаю как итог.

При запуске запроса второй я получаю перерыв вниз я получаю следующие результаты:

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

Так из того же источника данных я получаю две разные результаты. Может ли кто-нибудь сказать мне, что я делаю неправильно, в каком запросе или даже в обоих запросах?

Заранее спасибо, ребята!

+1

Переменная '@ time' имеет значение от 0 до 5 в запросе 2, в то время как в 1 запросе у вас жестко закодировано значение до 6. Я так думаю, вы должны использовать от 1 до 6 ... – Meherzad

+0

удивительно, я не заметил, что , что более удивительно, что он не изменил результат ..... это очень странно – lemunk

+0

У вас есть продажи в будущем? Что означает 'SELECT max ([DATETIME]) от возврата ILines? – Quassnoi

ответ

0

Ну, это было две причины, первый был поднят @meherzad. У меня был 1-й -6, тогда у меня было 0-5 во втором запросе.

Тогда другая причина заключалась в том, что первый запрос не был фактически обновлен моей таблицей, любой из них не получал результатов, это было связано с тем, что месяц()> month() не работает, поэтому я удалил это, теперь он появляется за работой.

спасибо, ребята!

Смежные вопросы