我有一个Leave
表格如下:
MONTH | NAME | DAY1 | DAY2 | DAY3 | ... | DAY31
------------------------------------------------
| | | | | ... |
列DAY1
至DAY31
会保留指定人员未在办公室工作的小时数。
我需要一个查询来生成此输出:
MONTH | NAME | TOTAL_MONTH_HOURS
---------------------------------
| |
其中TOTAL_MONTH_HOURS
是该月所有小时数的总和;即DAY1 + DAY2 + ... + DAY30+DAY31
我该如何撰写此查询?有没有办法逃避不得不像我上面那样对所有列进行求和?我不时遇到类似的问题,表格会变得更大!
注意:由于不同的月份长度,某些列可能是NULL
。
答案 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`