如何在 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
这是我正在使用的查询。
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