【问题标题】:Replace a value in a select query conditionally where a value is 1, replace it with 0, if value in another table is 0有条件地替换选择查询中的值,其中值为 1,如果另一个表中的值为 0,则将其替换为 0
【发布时间】:2019-12-04 17:21:39
【问题描述】:

我有 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,它将用 0 替换 OriginTable 选择中当天的值.

一些 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

【问题讨论】:

  • 我会在 ContrastTable 上使用 SIGN 并将其与 OriginTable 相乘。如果需要,我将在明天制定正确的答案。

标签: sql replace sql-server-2014


【解决方案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

【讨论】:

    【解决方案2】:

    试试这个:

     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
    

    【讨论】:

      【解决方案3】:

      使用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;
      

      【讨论】:

        猜你喜欢
        • 2017-10-14
        • 1970-01-01
        • 2023-01-19
        • 1970-01-01
        • 2021-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-23
        相关资源
        最近更新 更多