- PR -

カレンダテーブルからのデータ抽出

投稿者投稿内容
ロン
会議室デビュー日: 2003/09/12
投稿数: 16
投稿日時: 2004-10-07 16:59
お世話になります。

以下のようなテーブルがあります。

休暇テーブル
社員コード |SEQ |年 |月 |01日 |02日 |・・・(中略)・・・|30日 |31日 |
キーは社員コード&SEQです。

日付の数だけ列があり、その中に休みなら1、それ以外は0が入ります。

このテーブルより2003年1月21日〜2004年4月20日の期間に休暇を取った社員を取得
したいのですが、スマートなSQL文が思い浮かびません。

そこで@ITのエキスパートの方にご教授いただきたいのです。

よろしくお願いします。



おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-10-07 17:12
引用:

このテーブルより2003年1月21日〜2004年4月20日の期間に休暇を取った社員を取得
したいのですが、スマートなSQL文が思い浮かびません。


というか、なぜこんなテーブル設計なんでしょう・・・。
このテーブル設計は変更できませんか?
ロン
会議室デビュー日: 2003/09/12
投稿数: 16
投稿日時: 2004-10-07 17:19
お世話になります。

引用:

というか、なぜこんなテーブル設計なんでしょう・・・。
このテーブル設計は変更できませんか?



私もかなり不満を言ってるのですが、DBは元請が握っていて、
そこのプラチナの人の一存で・・・。誰も逆らえないらしいです。
恐らく入力画面のイメージから設計されたものと思われます。
残念ながら、この設計を変更することはできないのです。

よろしくお願いします。
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2004-10-07 17:19
あまりスマートじゃないですが・・・。

select 社員コード,年,月,
01日+02日+03日+04日+05日+06日+07日+08日+09日+10日 as 休暇日数1,
11日+12日+13日+14日+15日+16日+17日+18日+19日+20日 as 休暇日数2,
21日+22日+23日+24日+25日+26日+27日+28日+29日+30日+31日 as 休暇日数3
from 休暇テーブル where 年=2004 and
( 月=1 and 休暇日数3 > 0
or 月=2 and (休暇日数1+休暇日数2+休暇日数3) > 0
or 月=3 and (休暇日数1+休暇日数2) > 0 )

# しまった、動かしてみたらエラーですね。すみません!
# (修正しようとしたのですが引用されていたのでそのままにしておきます。。)

[ メッセージ編集済み 編集者: taro 編集日時 2004-10-07 17:35 ]
てっく
常連さん
会議室デビュー日: 2002/11/05
投稿数: 28
投稿日時: 2004-10-07 17:20
こんにちわ。

引用:
休暇テーブル
社員コード |SEQ |年 |月 |01日 |02日 |・・・(中略)・・・|30日 |31日 |
キーは社員コード&SEQです。

日付の数だけ列があり、その中に休みなら1、それ以外は0が入ります。


びみょ〜にSEQが気になるんですが、
社員コード&年&月だけでも一意なのでは?

[ メッセージ編集済み 編集者: てっく 編集日時 2004-10-07 17:23 ]
ロン
会議室デビュー日: 2003/09/12
投稿数: 16
投稿日時: 2004-10-07 17:32
お世話になります。
ご返答ありがとうございます。

引用:

taroさんの書き込み (2004-10-07 17:19) より:
あまりスマートじゃないですが・・・。

select 社員コード,年,月,
01日+02日+03日+04日+05日+06日+07日+08日+09日+10日 as 休暇日数1,
11日+12日+13日+14日+15日+16日+17日+18日+19日+20日 as 休暇日数2,
21日+22日+23日+24日+25日+26日+27日+28日+29日+30日+31日 as 休暇日数3
from 休暇テーブル where 年=2004 and
( 月=1 and 休暇日数3 > 0
or 月=2 and (休暇日数1+休暇日数2+休暇日数3) > 0
or 月=3 and (休暇日数1+休暇日数2) > 0 )



うぅ、やはりこんな感じじゃないと実現できないのでしょうかね?
書きもれてましたが指定範囲は任意なんです。

引用:

てっくさんの書き込み (2004-10-07 17:23) より:

びみょ〜にSEQが気になるんですが、
社員コード&年&月だけでも一意なのでは?



あれっ?
本当ですね。SEQなんてありませんでした。失礼しました。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-10-07 17:38
引用:

私もかなり不満を言ってるのですが、DBは元請が握っていて、
そこのプラチナの人の一存で・・・。誰も逆らえないらしいです。


ご愁傷様です・・・
これは後々問題になりそうな気がしますが、まあそれは置いといて。

taroさんの書かれた方法しか私は思い浮かばないですねえ。
後は、SQLを発行するクライアントプログラム内で、SQL文を効果的に生成する
位しかないのかな。。。
ロン
会議室デビュー日: 2003/09/12
投稿数: 16
投稿日時: 2004-10-08 11:31
お世話になります。
みなさま色々ありがとうございます。

taroさんの書かれたSQL確かにエラーになりました。
WHERE句では別名使えませんでしたね。確か。。

しかし、やはりこの様な方法くらいしかないのでしょうか?

環境を書くの忘れてました。
DB:ORACLE10G
アプリ:VB.NET
です。

スキルアップ/キャリアアップ(JOB@IT)