查询以显示每月的总休假时数

时间:2012-09-25 00:00:25

标签: sql

我有一个Leave表格如下:

MONTH | NAME | DAY1 | DAY2 | DAY3 | ... | DAY31
------------------------------------------------      
      |      |      |      |      | ... |     

DAY1DAY31会保留指定人员未在办公室工作的小时数。

我需要一个查询来生成此输出:

MONTH | NAME | TOTAL_MONTH_HOURS
---------------------------------      
      |      |        

其中TOTAL_MONTH_HOURS是该月所有小时数的总和;即DAY1 + DAY2 + ... + DAY30+DAY31

我该如何撰写此查询?有没有办法逃避不得不像我上面那样对所有列进行求和?我不时遇到类似的问题,表格会变得更大!

注意:由于不同的月份长度,某些列可能是NULL

2 个答案:

答案 0 :(得分:4)

对于当前的表结构,最简单的就是完全按照这个 -

Select Month, Name, Day1+Day2+Day3....+Day31 Total_Month_Hours
  From Tbl

现在,如果可能有NULL并且这是问题的原因,请用COALESCE包装它们。 COALESCE是ANSI SQL99标准的一部分,并且支持所有主要的RDBMS(MySQL Oracle SQLite PostgreSQL SQL Server)。

Select Month,
       Name,
       COALESCE(Day1,0)+COALESCE(Day2,0)+...+COALESCE(Day31,0) Total_Month_Hours
  From Tbl

答案 1 :(得分:2)

由于您无法更改表格,请点击此处:

SELECT `month`, `name`, (DAY1+DAY2+DAY3+DAY4+DAY5+DAY6+DAY7+DAY8+DAY9+DAY10+DAY11+DAY12+DAY13+DAY14+DAY15+DAY16+DAY17+DAY18+DAY19+DAY20+DAY21+DAY22+DAY23+DAY24+DAY25+DAY26+DAY27+DAY28+DAY29+DAY30+DAY31) AS `total_month_hours`
FROM `table_name`