【问题标题】:Updating Sum Case Statement Grouped By Id更新按 ID 分组的 Sum 案例语句
【发布时间】:2018-01-16 05:08:24
【问题描述】:

我需要创建更新语句,以便对转换后的值求和,并根据 case 语句将适当的结果写入数据库。这也必须按 id 分组,因为我们存储然后计算的答案,并且必须保存适当的结果以便于分析数据。 在尝试了太多东西之后我终于放弃了,今天已经足够了。有心有灵犀的人可以帮忙吗?

下面是我目前完成的脚本。

Update DB.sf_snew
Set answer = 
    (Case When
            sum(cast(question1 as Int)) +  sum(cast(question2 Int)) 
            + sum(cast(question3 as Int)) 
            <= 20 Then 'reject' Else 'accept' 
    End
    )
Group By Id

我不敢相信这么简单的事情让我的一天变得非常糟糕。 感谢您的帮助。

以下是存储在 snwew 表中的数据示例

【问题讨论】:

  • 请编辑您的问题并提供示例数据和所需结果。您的问题有很多语法错误,不清楚您要做什么。
  • ID 是唯一键吗?您要更新的表的结构是什么?
  • 如果Id 是唯一的,那么如果删除group by... 行,查询应该可以正常工作。
  • 嗨 GolfWolf,是的,尝试分组,但它不喜欢它,否则它将计算每一行中的所有数据并汇总为一行。在我的示例中,我需要计算所有按 id 分组的记录。

标签: sql sql-server tsql


【解决方案1】:

通过以下方式删除总和和组:

Update DB.sf_snew
Set answer = 
Case When
        cast(question1 as Int) +  cast(question2 Int)
        + cast(question3 as Int)
        <= 20 Then 'reject' Else 'accept' 
End

【讨论】:

  • 谢谢,我会在本周晚些时候试一试。
【解决方案2】:

您不需要使用聚合,只需执行以下操作:

UPDATE DB.sf_snew
SET Answer = CASE WHEN CAST(Question1 AS INT) + CAST(Question2 AS INT) + CAST(Question3 AS INT) <= 20 THEN 'Reject' ELSE 'Accept' END

UPDATE 将自动逐行工作

【讨论】:

  • 谢谢,对 Obie 的解决方案相同 ..,这让我觉得很乐观 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
相关资源
最近更新 更多