使用 OVER() 为 SQL Server 2012 中的每一行计算 %

Calculate % using OVER() for each row in SQL Server 2012

我需要有关如何计算每行两个单元格之间百分比的问题的指导。我在 SQL Server 2012 上。下面是我当前数据集的结构。

Customer_Number    Price_Last_Year      Price_Today
---------------------------------------------------
909523                   154               190
20175808                 154               100
21808187                 154               190
22792798                 184               284
23256155                 154               230

基本上,我想要做的是包括一个额外的列来计算每个特定行的 (Price_Today)/Price_Last_Year) 的百分比。我正在使用窗口 OVER() 函数,但它没有正常工作。

这就是我希望新数据集的样子:

Customer_Number Price_Last_Year     Price_Today     Percentage_AS ofToday%
909523                   154               190                 23.3%
20175808                 154                  100             -35.1%
21808187                 154               190                 23.3%
22792798                 184               284                 54.3%
23256155                 154               230                 49.3% 

这是我对百分比计算的查询:

SELECT DISTINCT
   Customer_Number,
   Price_Last_Year,
   Price_Today,
   [Percentage AS of Today%]=SUM(Price_Today)100.0/(Price_Last_Year) OVER()
FROM 
   tabl2 a
GROUP BY 
   Customer_Number, Price_Today, Price_Last_Year

我已经尝试了多种百分比 OVER() 计算方法。我什至尝试了类似 [Percentage AS of Today%]=SUM(Price_Today)100.0/(Price_Last_Year) OVER() (PARTITION BY Customer_Number) 的操作,但它会引发错误。

如何使用 OVER() 计算每一行的百分比?

鉴于您提供的数据,您似乎把这个问题复杂化了。 OVER 和 GROUP BY 一样似乎是不必要的。我想这会做你想要的。

SELECT Customer_Number 
     , Price_Last_Year
     , Price_Today
     , (Price_Today)*100.0/(Price_Last_Year) - 100 as [Percentage AS of Today%]    
FROM tabl2 a

如果您的计算是在同一行的两列之间,则不需要 over() 子句或 group by 子句 - 只需将两者相除即可。从 1 中减去它并乘以 100 应该会给你一个很好的百分比表示:

SELECT Customer_Number, 
       Price_Last_Year, 
       Price_Today, 
       (1 - (Price_Today/Price_Last_Year)) * 100 AS [Percentage AS of Today%]
FROM   tabl2