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。
我创建了一个 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。