1

私は以下のようなLeave表を持っています:

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

指名された人がオフィスにいなかった時間数DAY1を保持するための列。DAY31

この出力を生成するためのクエリが必要です。

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

ここで、TOTAL_MONTH_HOURSはその月のすべての時間の合計です。すなわちDAY1 + DAY2 + ... + DAY30+DAY31

このクエリはどのように書くべきですか?上記のようにすべての列を合計する必要がないようにする方法はありますか?テーブルがさらに大きくなるという同様の問題が時々発生します。

注:一部の列は、NULL月の長さが異なることが原因である可能性があります。

4

2 に答える 2

4

現在のテーブル構造を考えると、最も簡単なのは、まさにそれを行うことです-

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

ここで、NULLを持つことが可能であり、それが質問の理由である場合は、それらをCOALESCEでラップします。COALESCEはANSISQL99標準の一部であり、すべての主要な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 に答える