お世話になります。困り果てた挙句ご教授頂きたく投稿いたしました。
下記3つのテーブルより、EmpIDで検索をかけると、結果のようになる様にしたいのです。(下記はwhereで EmpID = @EmpIDが1の場合)
使っているのはSQLServer2005になります。
また、抽出範囲は、Periodが検索日当日(GetDate())より過去1年というものになります。
A table
EmpID Period 休暇理由 取得時間
1 1月 '有休' 8
1 1月 '病欠' 4
2 1月 '有休' 6
1 2月 '有休' 8
2 3月 '病欠' 5
1 4月 '病欠' 7
B table (有休取得)
EmpID Period 取得時間
1 1月 8
2 1月 6
1 2月 8
C table (病欠取得)
EmpID Period 取得時間
1 1月 4
2 3月 5
1 4月 7
結果
EmpID Period 取得時間(有休) 取得時間(病欠)
1 1月 8 4
1 2月 8 NULL ←NULLは0と表示
1 3月 NULL NULL ←共にNULLの場合、0もしくは表示させない
1 4月 NULL 7
coalesceやらfull outer joinやらを使っても思うようになりません。
使い方が良くないのかもしれませんが。
どなたかご教授の程、よろしくお願いいたしますm()m
No.1ベストアンサー
- 回答日時:
正規化されていませんが、本当にこの表でやりたいのですか?
もしそうならば、B表、C表は、A表と重複する情報を持っており、今回の結果であればA表だけから得られます。
select
EmpID,Period,
sum(case when 休暇理由='有休' then 取得時間 else 0 end) "取得時間(有休)",
sum(case when 休暇理由='病欠' then 取得時間 else 0 end) "取得時間(病欠)"
from A
where EmpID=1
group by EmpID,Period
order by EmpID,Period
もし私がこういった表を作るなら、以下のようにします。
(1)従業員表を作る
→EmpID、氏名などを管理
(2)カレンダー表を作る
→年月を管理。日付まで持ち、休日を識別することにも利用してもいい。
(3)休暇理由表を作る
→理由コードと理由を管理
(4)休暇管理表を作る
→EmpIDと年月、理由コード、取得時間を管理
↓
結果的に、A表に相当するものは必要なくなります。
→検索結果としてA表に相当するものを作れる
また、これらの表から今回の結果を得るのに、FULL JOINは必要ありません。
親表に対し子表が複数存在するLEFT JOINです。
ありがとうございます。
テーブルについては、手前の都合上一部カラムを省いています。
そのため、少し変なテーブルになってましてすみません。
ご教授いただいた方法で一度やってみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 労働相談 有給休暇使用時の賃金の計算方法について 5 2022/04/04 00:02
- 労働相談 有給消化を会社にお願いしました。 今年の4月で4年目になります。会社員です。 6月にコロナのワクチン 3 2022/06/13 13:03
- 労働相談 今年の4月で4年目になります。会社員です。 有給消化について質問です。 会社に10月にならないと有給 2 2022/08/27 15:51
- 健康保険 傷病手当金の申請について 3 2022/07/09 09:14
- 労働相談 有休消化について教えて下さい。 6月末にて退職の予定です。 現在、有休(1日8時間)残りが29日と半 2 2022/04/03 01:05
- 労働相談 【至急!!!】有給休暇について。 有給休暇について、ご意見をお聞かせください。 説明が下手で分かりに 4 2022/08/09 15:35
- 簿記検定・漢字検定・秘書検定 4月から商業高校の会計科に通う予定の中学生です。現在春休みで、簿記検定3級を取得しようと考えており、 1 2023/03/04 14:40
- 求人情報・採用情報 この求人はブラックだと思いますか? 月給26万5,000円 ~ 35万円 交通費支給あり <想定年収 9 2023/01/07 13:43
- 派遣社員・契約社員 派遣について詳しい方へ質問 1 有給の具体的な1日の金額は普段勤務している金額ではなく、もっと低いの 3 2023/05/09 15:04
- その他(ビジネス・キャリア) 有給休暇トラブル 3 2023/02/05 15:09
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSで3ファイルを結合して、...
-
ACCESSで複数テーブルを結合し...
-
ACCESS2007 フォーム 「バリア...
-
sqlserverで集計結果をUPDATEし...
-
SQLについて
-
Tverは無料でしょうか?
-
SQLで、行ごとのとある要素を比...
-
SQL Date型の列から年月だけを...
-
SQL文(最新データ且つ条件付)...
-
DBのテーブルの設計ができず困...
-
SQLのエラー(~付近に不適切な...
-
SQLCMDにて教えていただきたい...
-
VPSサーバーの日本語化について
-
<SQL>重複しているデータの場合...
-
Visuaal Studio Community 2022...
-
Access2021 「ISNULL関数には引...
-
[SQLServer] テーブル名からカ...
-
データベースのメタ値はどこに...
-
Accessの重複なしのカウントの...
-
SQL Serverのテーブル作成のエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECTした結果をSELECTしたい!
-
Accessで最新のレコード...
-
SQL Server 2000 を使用してい...
-
クエリ式でDcount の代わりは?
-
年、月、日を取得する関数
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
スキーマ
-
sqlに記述できない文字
-
オラクルのUPDATEで複数テーブル
-
Accessで今日から5日後
-
timestampのデータはどのように...
-
UPDATEで既存のレコードに文字...
-
pandasでsqlite3にテーブル作成...
-
テーブル名が可変の場合のクエ...
-
PostgreSQLのtimestamp型で時間...
-
truncate tableを使って複数の...
-
IDとパスワードについて。
-
エラーを起こす方法
おすすめ情報