社員のデータをテーブルに格納しました。
テーブルは下記のようになっています。inが入社年。outが退社年です。退社年が空白の社員は在籍中を表しています。
テーブル名:office
nama(VARCHAR型)|in(INT型)|out(INT型)
田中|2003|2008
加藤|1995|2001
桐谷|2009|
やりたい事が二点あります。
(1)「2007年に在籍した社員」と指定した場合。上のテーブルでいうと田中のデータを抽出。
「in<2007 AND out>2007」このような指定をすればいいのかと思ったのですが、空白(現在も在籍中)の場合どうすればいいのか分かりません。
(2)「在籍年数が4年以上6年未満の社員」と期間を指定した場合。上のテーブルでいうと田中と桐谷のデータを抽出。
この場合SQL文はどのようにすれば良いでしょうか?
このテーブルのデータの書き方だと難しいでしょうか?難しければもっとこうした方が良いなどアドバイスを頂けると幸甚です。
ご存知の方いらっしゃいましたらご教示ください。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
create table office(name varchar(10),`in` int,`out` int default 2999);
insert into office values('田中',2003,2008),('加藤',1995,2001),('桐谷',2009,default)
//2007年在籍
select * from office where 2007 between `in` and `out`; //田中さん
//2010年在籍
select * from office where 2010 between `in` and `out`; //桐谷さん
//在籍年数が4年以上6年未満の社員
select * from office where least(year(now()),`out`)-`in`+1 between 4 and 6 ; //田中さんと桐谷さん
回答ありがとうございます。
データはphpmyadminで入力しているのですが、デフォルト値を「2999」に設定しても上手く反映されず、結局在籍中の社員は「out」の数字を「2999」と直接入力しました。
そしてご教示頂いたSQL文で実行してみたら無事できました。
色々とありがとうございました。勉強になりました。
No.2
- 回答日時:
こういうのはoutのデフォルト値を2999などにしておけば済む話です
そうでないばあいintのデフォは0になるのでこれもあまり美しくない
またint値にnullを生かすのは可能な限りやめたほうがいい
ちなみに年だけで期間を表すと月ズレするのであまりいい管理方法とは言えません
>「在籍年数が4年以上6年未満の社員」
この条件は「在籍年数が4年以上6年未満の『すでにやめた』社員」と
「在籍年数が4年以上6年未満の『在籍中の』社員」に分けられますが
別に管理しなくてもいいんでしょうか?
回答ありがとうございます。
>こういうのはoutのデフォルト値を2999などにしておけば済む話です
そのようにしました。
色々勉強になりました。ありがとうございました。
No.1
- 回答日時:
(1)
select * from office where in <= 2007 and (out >= 2007 or out is null);
(2)
select * from office where (in <= (year(now()) -4) and in > (year(now()) -6) and out is null) or ((out - in) >= 4 and (out - in) < 6);
この回答への補足
回答ありがとうございます。
(1)と(2)を先ほど実行してみたのですが、また私の説明が足りなかったかもしれません。
空白(現在在籍している社員)の場合は今年の年(2014年)が入力されているのと同じ処理ができればと思っています。
(1)ですと例に出した「2007年に在籍した社員」と指定した場合は田中のデータが抽出できるのですが、「2010年に在籍した社員」と指定した場合は現在在籍していて退社年が空白の桐谷のデータは抽出できません。
退社済みの社員のみが対象となってしまっているようです。
(2)も上記と同じです。データは抽出できるのですが、退社済みの社員が対象となってしまっています。
この問題は現在在籍している社員の退社年に今年の年を記入すれば解決すると思うのですが、別に「○○年に退社した社員」という指定で抽出もしているので在籍しているにもかかわらず退社している社員として抽出されてしまうのでできません。
こういったものはやはり無理があるでしょうか?
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server SQL Oracle serverにって質問です。 会社テーブルがあり、そのテーブルから 社員名、給 4 2022/05/21 12:22
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- 教育・学術・研究 上場企業において、採用した若手社員が実際に活躍できているのか、またはできていないのか比較分析したいで 1 2022/10/02 15:10
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- 就職・退職 準社員の退職について教えてください。 6 2022/06/05 22:07
- 所得・給料・お小遣い 雇用契約書に「夏季賞与は前年の11月16日から当年5月15日までに在籍し支給日まで引き続き勤務する者 6 2022/06/25 11:39
- 会社・職場 Excel、Googleスプレッドシートなどへのデータ入力 2 2023/07/06 05:59
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
あってますか?SQL
-
テーブル名が可変の場合のクエ...
-
既存データをINSERT文にして出...
-
ACCESS クエリーでソートの不具合
-
SQLで、Join句で結合したテ...
-
ExcelのVLOOKUP関数の動作をMyS...
-
2つのテーブルをLIKE演算子のよ...
-
結合したテーブルをSUMしたい
-
ADO+ODBCでテーブルに接続する...
-
指定した年に在籍していた社員...
-
ACCESSのVBAにてExcelに行...
-
ACCESS-VBAでEXCEL出力
-
DB、キャストとインサートを...
-
Access特定のテーブルを編集不...
-
在庫管理のデータベース
-
Access 別のDBに対してDlookup...
-
AccessとSQL Serverの連携について
-
副問合せを使わずにUNIONと同様...
-
同一テーブル内での比較(最新...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
既存データをINSERT文にして出...
-
SQLで、Join句で結合したテ...
-
結合したテーブルをSUMしたい
-
テーブル名が可変の場合のクエ...
-
Accessの構成をコピーしたい
-
ACCESSのVBAにてExcelに行...
-
ExcelのMatch関数のようなもの...
-
ACCESS クエリーでソートの不具合
-
ExcelのVLOOKUP関数の動作をMyS...
-
データ無し時は空白行にしたい...
-
2つのテーブルをLIKE演算子のよ...
-
同一テーブル内での比較(最新...
-
ADO+ODBCでテーブルに接続する...
-
複数のテーブルからデータを取...
-
PRIMARY KEYのコピー
-
SQLです!!教えてください。あ...
-
改行を含んだデータのインポート
-
SQLです!!教えてください。あ...
-
Excelでしりとりを作る方法
おすすめ情報