我试图在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。
这是问题中数据的快速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