2013-03-28 2 views
0

У меня есть данные о продажах по месяцам по году для всех моих поставщиков. Я ищу, чтобы получить следующие полученные поля ... Продажи, продажи в 2012 году, продажи в 2013 году, средний месячный объем продаж на 2012 год, 2013 месяц. Прогнозируемые продажи. Последнее поле - это то, с чем я столкнулся. Мне нужно усреднить последние 5 месяцев полных данных продаж, а затем умножить на 12. Вот запрос я работаю ...Сводные данные по продажам за месяц и год в T-SQL

SELECT 
    a.Vendor, 
    a.Vendor_Name, 
    SUM(a.Sales2012) AS Sales_2012, 
    SUM(a.Sales2013) AS Sales_2013 
FROM 
(SELECT 
    Vendor, 
    Vendor_Name, 
    CASE 
     WHEN Month_Sold IN ('201201','201202','201203','201204','201205','201206','201207','201208','201209','201210','201211','201212') THEN SUM(Sales_Dlr) END AS 'Sales2012', 
    CASE 
     WHEN Month_Sold IN ('201301','201302','201303','201304','201305','201306','201307','201308','201309','201310','201311','201312') THEN SUM(Sales_Dlr) END AS 'Sales2013' 
FROM 
    dbo.SalesSummary 
GROUP BY 
    Vendor, 
    Vendor_Name, 
    Month_Sold 
)a 
GROUP BY 
    a.Vendor, 
    a.Vendor_Name 
ORDER BY 
    a.Vendor_Name 

ответ

1

Предполагая SalesSummary.Vendor это ID, вы можете попробовать добавление подзапрос за последние 5 месяцев, а затем умножить на 12 во внешнем запросе:

DECLARE @Today DATE = GETDATE(); 

SELECT 
    a.Vendor, 
    a.Vendor_Name, 
    SUM(a.Sales2012) AS Sales_2012, 
    SUM(a.Sales2013) AS Sales_2013, 
    b.Sales_Dlr_Avg * 12 AS [Monthly Projected Sales] 
FROM 
(SELECT 
    Vendor, 
    Vendor_Name, 
    CASE 
     WHEN Month_Sold IN ('201201','201202','201203','201204','201205','201206','201207','201208','201209','201210','201211','201212') THEN SUM(Sales_Dlr) END AS 'Sales2012', 
    CASE 
     WHEN Month_Sold IN ('201301','201302','201303','201304','201305','201306','201307','201308','201309','201310','201311','201312') THEN SUM(Sales_Dlr) END AS 'Sales2013' 
FROM 
    dbo.SalesSummary 
GROUP BY 
    Vendor, 
    Vendor_Name, 
    Month_Sold 
)a 
JOIN (
    SELECT Vendor, Sales_Dlr_Avg = AVG(Sales_Dlr) 
    FROM dbo.SalesSummary 
    WHERE DATEDIFF(MONTH, CAST(Month_Sold AS VARCHAR(6)) + '01', @Today) BETWEEN 1 AND 5 
    GROUP BY Vendor 
) b ON b.Vendor = a.Vendor 
GROUP BY 
    a.Vendor, 
    a.Vendor_Name, 
    b.Sales_Dlr_Avg 
ORDER BY 
    a.Vendor_Name; 
+0

Это сработало! Мне просто нужно было добавить Sales_Dlr_Avg в группу By. – tsqln00b

+0

А, да. Я отредактировал ответ соответственно. –

+0

Не принимает ли текущий месяц данные за 5-месячный расчет? Например, я не хочу, чтобы он усреднял данные, когда мы попадаем в апреле, поскольку данных там не будет и будет искажать среднее значение. – tsqln00b

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