我有2张桌子:
OriginTable
:
ID | Monday | Tuesday | Wednesday
1 | 1 | 1 | 2
#ContrastTable
:
ID | MoTotal | TuTotal | WeTotal
1 | 6 | 0 | 32
我想这样做:
Select ot.Monday, ot.Tuesday, ot.Wednesday From OriginTable ot
| 1 | 1 | 2
但是我想编辑结果集,使得如果ContrastTable
中的 Total 为0,它将用OriginTable
select中的那天替换为0
。
一些Crappy-SQL™看起来像这样(这只是为了展示我的意图,我知道这是行不通的):
Select ot.Monday, Replace(ot.Tuesday, ot.Tuesday, (ct.TuTotal) `[if ct.TuTotal is 0]`), ot.Wednesday From OriginTable ot
Inner Join #ContrastTable ct on ot.ID = ct.ID
答案 0 :(得分:1)
使用IIF()
可以获得预期的结果:
Select ot.Monday,
--Replace(ot.Tuesday, ot.Tuesday, (ct.TuTotal) `[if ct.TuTotal is 0]`),
IIF(ct.TuTotal = 0, ct.TuTotal, ot.Tuesday) AS Tuesday
ot.Wednesday
From OriginTable ot
Inner Join #ContrastTable ct on ot.ID = ct.ID
答案 1 :(得分:1)
尝试一下:
select ot.id
, case when c.MoTotal = 0 then 0 else ot.Monday end as Monday
, case when c.TuTotal = 0 then 0 else ot.Tuesday end as Tuesday
, case when c.WeTotal= 0 then 0 else ot.Wednesday end as Wednesday
From OriginTable ot
inner join #ContrastTable as c on ot.id=c.id
答案 2 :(得分:1)
使用case
表达式:
select (case when ct.MoTotal = 0 then 0 else ot.Monday end) as Monday,
(case when ct.TuTotal = 0 then 0 else ot.Tuesday end) as Tuesday,
(case when ct.WeTotal = 0 then 0 else ot.Wednesday end) as Wednesday
from OriginTable ot left join
#ContractTable ct
on ct.id = ot.id;