【问题标题】:SQL script to check a value then if found increment a field by a value of 1用于检查值的 SQL 脚本,如果找到,则将字段的值增加 1
【发布时间】:2013-05-08 21:41:20
【问题描述】:

我正在尝试编写一个脚本,该脚本将从名为“预订”的表中提取信息,其中包含一个列,该列给出了每个预订的长度,称为“小时”。例如,此列中的值显示为 1.0 代表 60 分钟、0.75 代表 45 分钟、0.5 代表 30 分钟。我的脚本需要计算特定长度的预订量并返回值,因此例如我对每个使用 Sum 和 Case 语句...

SUM(case when Hours = 1 then 1 else 0 end) as '60 Mins',

SUM(case when Hours = 0.75 then 1 else 0 end) as '45 Mins',

SUM(case when Hours = 0.5 then 1 else 0 end) as '30 Mins',

SUM(case when Hours = 0.25 then 1 else 0 end) as '15 Mins'

我的问题是我需要记录超过 60 分钟的预订并将它们分成这四个组之一,例如 1.5 小时需要在 60 分钟的案例语句中添加 +1 的值以及 +1 计数到 30 分钟的案例陈述值,

我能想到的唯一方法是创建一个临时表,其中包含 60、45、30 和 15 个计数值的列,然后如果找到结果,则将该表更新 +1,因此 1.25 将更新 #temptable列(60)+1 和列(15)+1。不知道如何做到这一点,非常感谢帮助。

谢谢

西蒙

【问题讨论】:

  • 好像MOD函数就是你想要的。
  • 你用的是什么数据库?
  • SQL 数据库版本 2008

标签: sql sum case temp-tables


【解决方案1】:

看看这个sql fiddle。希望这足以让您入门。

select hours
       ,100*(hours - round(hours,0,1))
from table1

所以你的代码会是这样的

SUM(case when hours - round(hours,0,1) = 0 then 1 else 0 end) as '60 Mins',

SUM(case when hours - round(hours,0,1) = 0.75 then 1 else 0 end) as '45 Mins',

SUM(case when hours - round(hours,0,1) = 0.5 then 1 else 0 end) as '30 Mins',

SUM(case when hours - round(hours,0,1) = 0.25 then 1 else 0 end) as '15 Mins'

【讨论】:

  • 谢谢,这似乎是一个非常有用的网站,几乎是我想达到的目标。如果有意义,该脚本是否会计算 1.5 小时的预订并将计数添加到 60 分钟列 +1 和 30 分钟列 +1?
  • 好的,这是包含小时块计算的修改后的小提琴。 sqlfiddle.com/#!3/bc43a/7
  • 这真是太聪明了,太接近了,谢谢!它适用于长度为 1.25 1.5 等的预订。对于 1 小时的预订,例如 2 小时和 3 小时,我总共有 223 个应该在 60 分钟列以下,但脚本只显示 77 个。
  • 在示例中,它正确计算了 24 小时块,因此您的数据集或查询中肯定有其他事情发生。
  • 您是否使用sum(round(hours,0,1)) as hour_blocks 来计算小时块?
猜你喜欢
  • 2020-12-30
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多