SQL добавляет столбец в базу таблицы, другой столбец и строку

Я создаю таблицу, показывающую общий доход за год и месяц, я хочу добавить столбец в таблицу, показывающую, превышает ли общий доход более 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)

Я получил:

SQL добавляет столбец в базу таблицы, другой столбец и строку

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

SQL добавляет столбец в базу таблицы, другой столбец и строку

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

Это очень похоже на домашнее задание...?

iamdave 01.05.2019 10:32

Это домашнее задание, я пытался, но не получилось.

eliad choen 01.05.2019 10:35

Этот сайт не предназначен для решения домашних заданий. Вам нужно разобраться в этих вещах самостоятельно, иначе вы не научитесь. Чем я вам помогу, так это изучить функции lag и lead.

iamdave 01.05.2019 10:38

@iamdave, ОП, на самом деле поделился своей попыткой здесь, поэтому я бы предположил, что это по теме. На странице справки написано «Вопросы с просьбой помочь с домашним заданием должны включать в себя краткое изложение работы, которую вы проделали до сих пор, чтобы решить проблему, и описание трудности, с которой вы столкнулись при ее решении».. Они показали нам, что пробовали, и результаты, к которым стремились. Вы правы, им нужны LEAD и LAG. Элиад, предлагаю прочитать документацию на LAG и показать свою новую попытку. Если вы не понимаете синтаксиса, добавьте в свой вопрос подробности о том, что вы не понимаете.

Larnu 01.05.2019 10:56
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
4
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать 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.
  • Используйте псевдонимы таблиц, которые являются сокращениями имен таблиц.
  • Квалифицируйте все ссылки на столбцы, особенно если ваш запрос ссылается более чем на одну таблицу.

Другие вопросы по теме