如何在 SQL 服务器中动态创建计算列?

How to create a calculated column on the fly in SQL Server?

这是我正在使用的查询。

    Select  Product, Number,
    (Select 
        CASE 
        WHEN Product = 'WATCH'
        THEN (DaysRemYr-125)
        ELSE DaysRemYr
        END  
        from report) DaysRem,
        ((dailysales_YTD*DaysRem)+(SumYTDRev)) as ProjRev
From report
Group by Product,Number

现在一切都搞砸了,但我想要实现的是一个计算列 Projected_Revenue,它是由

计算的
   DailySales_YTD*DaysRemYr

但是,我想创建一个新的 "DaysRemYr" 列,将其命名为 DaysRem,其中的逻辑是

        WHEN Product = 'WATCH'
        THEN (DaysRemYr-125)
        ELSE DaysRemYr

这样我就可以使用这个新列来计算下面给出的另一列,

        ((dailysales_YTD*DaysRem)+(SumYTDRev)) as ProjRev

为了消除任何混淆并进行总结,我正在尝试创建一个 Select 语句,其中一列是通过将现有列与一个新的有条件的计算列相乘来计算的。

所以,思路是说

           Select 
                 Product, Number, 
                 a calculated column which is based on the CASE condition as shown before lets call it DaysRem,
                (SUM(DailySales_YTD*DaysRem)+SUM(SUMYTDRev)) as ProjRev
          from report  

我想知道这是否可能。

这里有一些示例数据可以提供帮助。

  Product   Number  SUMYTDRev   dailySales_YTD  DaysRemYR
  WHEEL     2533    9370.58     112.90          170
  WHEEL     8213    3206.08     38.63           170
  WHEEL     6475    22770       274.34          170
  WHEEL     6475    80608.01     971.18         170
  WATCH     8213    146007.2    1759.12         170
  WATCH     1177    11500.9      138.57         170
  WATCH     1177    39006        469.95         170
  WATCH     2371    446990      5385.42         170
  WATCH     2371    69005.4      831.39         170
  WATCH      204    260008      3132.63         170
  BIKE       441    60000        722.89         170
  BIKE      6815    18300        220.48         170
  BIKE      8918    39900        480.72         170

您可以在计算中使用case表达式。

Select Product, Number, 
CASE WHEN Product = 'WATCH' THEN DaysRemYr-125 ELSE DaysRemYr END as DaysRem,
SUM(DailySales_YTD*CASE WHEN Product = 'WATCH' THEN DaysRemYr-125 ELSE DaysRemYr END)+SUM(SUMYTDRev) as ProjRev
From report  
Group by Product,Number,CASE WHEN Product = 'WATCH' THEN DaysRemYr-125 ELSE DaysRemYr END

如果您不想多次指定计算,请在计算中使用派生的 table。

Select Product, Number, DaysRem,
SUM(DailySales_YTD*DaysRem)+SUM(SUMYTDRev) as ProjRev
From (select r.*,CASE WHEN Product = 'WATCH' THEN DaysRemYr-125 ELSE DaysRemYr END as DaysRem
      from report r) r
Group by Product,Number,DaysRem