【问题标题】:Combining IF ELSE clause with UPDATE in TSQL在 SQL 中结合 IF ELSE 子句和 UPDATE
【发布时间】:2020-08-10 22:08:16
【问题描述】:

如果满足不同的条件,则尝试为表中的行组合一个 UPDATE 子句。我正在通过 Azure SQL 上的 TSQL 执行此操作。

我可以运行多个互斥的绿色代码格式的 TSQL 语句,但我宁愿使用嵌套的 IF ELSE 语句以使代码更清晰。

这可能吗?

【问题讨论】:

  • 请将您的代码发布为文本,而不是图像。
  • 为什么认为你需要一个while 循环?
  • 从以前的帖子中看到它,但那是为了优化对大型数据集的查询。删除

标签: sql-server azure tsql


【解决方案1】:

使用case 表达式一键完成所有操作。

update student set
    p2 = case when total_score > 500 then 'pass' else 'fail' end
where p2 is null;

您可以通过使用case 表达式来测试列是否需要更新,如下所示组合这两个更新:

update student set
    p1 = case when p1 is null and age > 20 then 'old' else p1 end
    , p2 = case when p2 is null then case when total_score > 500 then 'pass' else 'fail' end else p2 end
where p2 is null or p1 is null;

注意:作为一个设计问题,根据学生的年龄设置列值通常不是一个好主意,因为它只给你一个时间点,所以你通常需要不断更新它。查询表时计算它要好得多。

【讨论】:

  • 你也应该这样重写他的第一个查询(p1)。
  • +10 这个答案中关于存储age 的要点;通常age 是在两个时间点之间计算的……对于一个人来说,通常是出生日期和现在之间的差异。并且一个人的出生日期通常不会改变,其中 dob 和 now 之间的差异会随着 now 值的变化而变化。 TAKEAWAY:存储dob 而不是age,在需要时计算年龄
  • 非常感谢。对 TSQL 非常陌生,因此请多多指教。
猜你喜欢
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2014-04-27
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
相关资源
最近更新 更多