1

我有一张Leave如下表:

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

DAY1用于DAY31保存指定人员未在办公室的小时数的列。

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

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

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

我应该如何编写这个查询?有什么办法可以避免像我上面那样对所有列求和吗?我不时遇到类似的问题,表格变得更大!

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

4

2 回答 2

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
于 2012-09-25T00:04:02.253 回答
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`
于 2012-09-25T00:05:18.103 回答