在SQL中创建条件列

问题描述 投票:0回答:1

我试图在T-SQL中创建一个条件列,如if语句,而不是打印一个字符串,我希望它从数据集中的另一列中提取数据。

SELECT 
    CASE 
       WHEN NameDay = 'Sunday' 
          THEN [sales] 
          ELSE [SunAdj] 
    END AS AdjustedDays
FROM 
    Table

基本上我希望它从[sales]列中提取数据,如果NameDay列中的那一天是'Sunday',否则从[SunAdj]拉出来。我可以让它工作填充字符串,但不填充其他列的数据。这可能吗?如果是这样的话?任何帮助将非常感激。

Product   category    Sales   SunAdj    NameDay  
--------------------------------------------------
Meat                  1000     3500     Sunday  
Fish                  1000     3500     Wednesday  
Bakery                1000     3500     Friday  

我想要另一个名为AdjustedDays的列,第一行显示1000,其他列显示3500。

tsql if-statement case-when
1个回答
0
投票

这是问题中数据的快速CTE设置:

; with sourceData (Product, Category, Sales, SunAdj, NameDay)
as 
(
      select 'Meat', null, 1000, 3500, 'Sunday'
union select 'Fish', null, 1000, 3500, 'Wednesday'
union select 'Bakery', null, 1000, 3500, 'Friday'
)
...

我们可以用它来证明你的陈述已经是正确的:

; with sourceData (Product, Category, Sales, SunAdj, NameDay)
as 
(
      select 'Meat', null, 1000, 3500, 'Sunday'
union select 'Fish', null, 1000, 3500, 'Wednesday'
union select 'Bakery', null, 1000, 3500, 'Friday'
)
select 
    Product, Category, Sales, SunAdj, NameDay, 
    CASE when NameDay = 'Sunday' then [sales] 
         else [SunAdj] end as AdjustedDays
from sourceData

只是为我的答案添加一点价值,你可以用IIF函数实现同样的目的:

; with sourceData (Product, Category, Sales, SunAdj, NameDay)
as 
(
      select 'Meat', null, 1000, 3500, 'Sunday'
union select 'Fish', null, 1000, 3500, 'Wednesday'
union select 'Bakery', null, 1000, 3500, 'Friday'
)
select 
    Product, Category, Sales, SunAdj, NameDay, iif(NameDay='Sunday', SunAdj, Sales) AdjustedDays
from sourceData

两个查询都给出相同的结果:

Product Category    Sales       SunAdj      NameDay   AdjustedDays
------- ----------- ----------- ----------- --------- ------------
Bakery  NULL        1000        3500        Friday    1000
Fish    NULL        1000        3500        Wednesday 1000
Meat    NULL        1000        3500        Sunday    3500
© www.soinside.com 2019 - 2024. All rights reserved.