根据SQL Server中的其他列值计算列

use*_*609 0 sql sql-server

sqlselect语句的结果如下所示:

select * from table

Location    Role              Days
-----------------------------------
Hong Kong   Senior Associate  48
Canberra    Senior Associate  60
Sydney      Senior Associate  55
Run Code Online (Sandbox Code Playgroud)

我想在上面的结果中添加一列 - Hours(SQL Server表中没有小时列).

Hours 应根据位置进行计算

  • 如果香港那么天/ 7
  • 如果堪培拉那么Days/7.5
  • 如果悉尼那么天/ 7.25

结果应该是:

Location    Role              Days Hours
-----------------------------------------
Hong Kong   Senior Associate  48   6.85
Canberra    Senior Associate  60   8
Sydney      Senior Associate  55   7.586
Run Code Online (Sandbox Code Playgroud)

我试过用select case它来检查只有一个条件(if和else)和列应该在数据库中.

select 
    case 
       when location = 'Sydney' 
          then Days/7 
       else Days/7.5 
    end as Hours
Run Code Online (Sandbox Code Playgroud)

但是我想要在一个SQL语句中检查所有条件并添加不在数据库中的小时列.

请任何建议.

Gor*_*off 5

A case解决了这个问题:

select location, role, days,
       (case when location = 'Hong Kong' then days / 7.0
             when location = 'Canberra' then days / 7.5
             when location = 'Sydney' then days / 7.25
        end) as hours
from t;
Run Code Online (Sandbox Code Playgroud)

您甚至可以使用计算列将此列添加到表中:

alter table t
    add hours as (case when location = 'Hong Kong' then days / 7.0
                       when location = 'Canberra' then days / 7.5
                       when location = 'Sydney' then days / 7.25
                  end);
Run Code Online (Sandbox Code Playgroud)