SQL 添加列到 table 基于另一列和行

SQL add column to table base another column and row

我创建了一个 table 显示年和月的总收入,如果之后的总收入大于之前的收入的 10%,我想添加一列到 table 显示。

我试过了:

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)

我得到了:

我需要得到:

问题是我需要计算前一行和当前行之间的变化百分比,我该怎么做?

您可以使用 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语法。
  • 使用 table 别名,它们是 table 名称的缩写。
  • 限定所有列引用,尤其是当您的查询引用多个列时 table。