代码之家  ›  专栏  ›  技术社区  ›  Kenzo_Gilead

返回用于选择选项的大小写和的isnull

  •  0
  • Kenzo_Gilead  · 技术社区  · 6 年前

    当另一列(在同一行中)为真时,我想返回一列的值之和。但是,我做不到…

    我正在尝试下一个,但没有人看起来是正确的。

    我能在这里得到点帮助吗?谢谢各位。

    ISNULL(SUM(CASE WHEN dbo.TD_MODULO.FIELD1== true THEN dbo.TD_MODULO.FIELD2 ELSE 0 end),0) AS MY_CALCULATED_FIELD1
    
    isnull(sum(if dbo.td_modulo.FIELD1 == true, dbo.td_modulo.FIELD2, 0), 0) as MY_CALCULATED_FIELD2
    
    ISNULL(SUM(CASE dbo.TD_MODULO.FIELD1 WHEN THEN dbo.TD_MODULO.FIELD2 ELSE 0 end),0) AS MY_CALCULATED_FIELD1
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Marc Guillot    6 年前

    field1是位(布尔)字段吗?,然后将其与1或0进行比较

    select sum(case when FIELD1 = 1 then FIELD2 else 0 end) AS MY_CALCULATED_FIELD1
    from dbo.TD_MODULO
    
        2
  •  1
  •   EzLo tumao kaixin    6 年前

    dbo.TD_MODULO.FIELD1 == true 这让人吃惊。SQL Server中没有布尔值,因此不能简单地写true或false(如果是文本,则 'true' 'false' ,如果 BIT 然后 1 0 ),你只需要一个等号。

    正确的表达是 SUM 用一个 CASE 是的。假设 TD_MODULO.FIELD1 是一个 VARCHAR 是的。

    SUM(CASE WHEN dbo.TD_MODULO.FIELD1 = 'true' THEN dbo.TD_MODULO.FIELD2 END)
    

    你可以堆一个 ISNULL 最重要的是。不需要做 ELSE 0 ,作为 NULL ( ELSE 的默认值)将不会添加到 SUM() 是的。