簡體   English   中英

如何在SQL Server中動態創建計算列?

[英]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

如果不想多次指定計算,請在計算中使用派生表。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM