- - PR -
カレンダテーブルからのデータ抽出
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-10-07 16:59
お世話になります。
以下のようなテーブルがあります。 休暇テーブル 社員コード |SEQ |年 |月 |01日 |02日 |・・・(中略)・・・|30日 |31日 | キーは社員コード&SEQです。 日付の数だけ列があり、その中に休みなら1、それ以外は0が入ります。 このテーブルより2003年1月21日〜2004年4月20日の期間に休暇を取った社員を取得 したいのですが、スマートなSQL文が思い浮かびません。 そこで@ITのエキスパートの方にご教授いただきたいのです。 よろしくお願いします。 | ||||||||
|
投稿日時: 2004-10-07 17:12
というか、なぜこんなテーブル設計なんでしょう・・・。 このテーブル設計は変更できませんか? | ||||||||
|
投稿日時: 2004-10-07 17:19
お世話になります。
私もかなり不満を言ってるのですが、DBは元請が握っていて、 そこのプラチナの人の一存で・・・。誰も逆らえないらしいです。 恐らく入力画面のイメージから設計されたものと思われます。 残念ながら、この設計を変更することはできないのです。 よろしくお願いします。 | ||||||||
|
投稿日時: 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 ] | ||||||||
|
投稿日時: 2004-10-07 17:20
こんにちわ。
びみょ〜にSEQが気になるんですが、 社員コード&年&月だけでも一意なのでは? [ メッセージ編集済み 編集者: てっく 編集日時 2004-10-07 17:23 ] | ||||||||
|
投稿日時: 2004-10-07 17:32
お世話になります。
ご返答ありがとうございます。
うぅ、やはりこんな感じじゃないと実現できないのでしょうかね? 書きもれてましたが指定範囲は任意なんです。
あれっ? 本当ですね。SEQなんてありませんでした。失礼しました。 | ||||||||
|
投稿日時: 2004-10-07 17:38
ご愁傷様です・・・ これは後々問題になりそうな気がしますが、まあそれは置いといて。 taroさんの書かれた方法しか私は思い浮かばないですねえ。 後は、SQLを発行するクライアントプログラム内で、SQL文を効果的に生成する 位しかないのかな。。。 | ||||||||
|
投稿日時: 2004-10-08 11:31
お世話になります。
みなさま色々ありがとうございます。 taroさんの書かれたSQL確かにエラーになりました。 WHERE句では別名使えませんでしたね。確か。。 しかし、やはりこの様な方法くらいしかないのでしょうか? 環境を書くの忘れてました。 DB:ORACLE10G アプリ:VB.NET です。 |