SQL добавить столбец в таблицу, основать другой столбец и строку - PullRequest
0 голосов
/ 01 мая 2019

Я создаю таблицу, показывающую общий доход за год и месяц, я хочу добавить столбец в таблицу, показывающий, если общий доход после превышает 10 процентов дохода до.

Я пытался:

select DATEPART(YEAR, OrderDate) AS OrderYear,
DATEPART(MONTH, OrderDate) AS OrderMonth,
ROUND(SUM(UnitPrice*Quantity-Discount),2) AS Total_Revenue,
case when   SUM(UnitPrice*Quantity-Discount)  > 10 THEN '>10' ELSE '<=10' end  my_col
FROM [Order Details], Orders
WHERE Orders.OrderID = [Order Details].OrderID
GROUP BY DATEPART(YEAR, OrderDate), DATEPART(MONTH, OrderDate)
ORDER BY DATEPART(YEAR, OrderDate), DATEPART(MONTH, OrderDate)

Я получил:

enter image description here

Мне нужно получить:

enter image description here

Проблема в том, что мне нужно вычислить процент изменений между предыдущей и текущей строками, как я могу это сделать?

1 Ответ

0 голосов
/ 01 мая 2019

Вы можете использовать LAG().Я бы рекомендовал подзапрос, чтобы упростить именование:

select ym.*,
       (case when Total_Revenue > 1.1 * lag(Total_Revenue) over (order by orderyear, ordermonth)
             then 'Reached'
             else 'Missed'
        end)
from (select DATEPART(YEAR, o.OrderDate) AS OrderYear,
             DATEPART(MONTH, o.OrderDate) AS OrderMonth,                
     ROUND(SUM(od.UnitPrice * od.Quantity - od.Discount), 2) AS Total_Revenue
      from [Order Details] od join
           Orders o
           on o.OrderID = od.OrderID
      group by DATEPART(YEAR, o.OrderDate), DATEPART(MONTH, o.OrderDate)
     ) ym
order by orderyear, ordermonth;

Примечания:

  • Никогда не используйте запятые в предложении FROM.
  • Всегда используйте правильный, явный, стандартный JOIN синтаксис.
  • Используйте псевдонимы таблиц, которые являются аббревиатурами для имен таблиц.
  • Уточните все ссылки на столбцы, особенно если ваш запрос ссылается на несколько таблиц.
...