🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

Q&A

解決済

2回答

1004閲覧

開始日、終了日をもったテーブルAからカレンダマスタを範囲検索して1つの表としたい

tuti

総合スコア6

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

0グッド

1クリップ

投稿2019/10/08 00:19

前提・実現したいこと

下記のテーブルA、カレンダマスタがある場合で、テーブルAの開始日、終了日から
カレンダマスタの年月日を範囲検索して、稼働フラグの合計数を取得したい
それを、1つのSQL文で作成する事は可能でしょうか。

例)テーブルA
ID、開始日、終了日
1、20191001、20191004
2、20191005、20191015
3、20191013、20191020

カレンダマスタ
年月日、稼働フラグ
20191001、1
20191002、1
20191003、1
20191004、1
20191005、0
20191006、0
20191007、1
20191008、1
20191009、1
20191010、1
20191011、1
20191012、0
20191013、0
20191014、0
20191015、1
20191016、1
20191017、1
20191018、1
20191019、1
20191020、0

結果のイメージ
例)テーブルB
ID、開始日、終了日、稼働日数
1、20191001、20191004、4
2、20191005、20191015、6
3、20191013、20191020、4

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

BETWEEN句やサブクエリなど考えましたが、思うようなイメージにならなかった為

補足情報(FW/ツールのバージョンなど)

ORACLEやSQLServer、DB2でも何でもいいのですが、SQLで1つの表にする作り方があれば教えて頂けますでしょうか。
ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

結果の指定がある場合に素直に書けるのがSELECT句のサブクエリです。

SQL

1SELECT a.ID, a.開始日, a.終了日, 2( 3 SELECT COUNT(1) 4 FROM カレンダマスタ AS c 5 WHERE c.年月日 BETWEEN a.開始日 AND a.終了日 6 AND c.稼働フラグ = 1 7) AS 稼働日数 8FROM テーブルA AS a

環境がないので未検証ですが…

投稿2019/10/08 01:37

hihijiji

総合スコア4152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

動かしてないですがこんな感じ?

sql

1select テーブルA.ID, テーブルA.開始日, テーブルA.終了日, sum(カレンダマスタ.稼働フラグ) AS 稼働日数 2from テーブルA, カレンダマスタ 3where カレンダマスタ.年月日 between テーブルA.開始日 and テーブルA.終了日 4group by テーブルA.ID, テーブルA.開始日, テーブルA.終了日

以下のようなテーブルがあれば集計は簡単だと思うので、どんな SQL を書けばこんなテーブルになるか考えてクエリを組み立てればいいと思います。

ID開始日終了日年月日稼働フラグ
12019100120191004201910011
12019100120191004201910021
12019100120191004201910031
12019100120191004201910040
22019100520191015201910051
22019100520191015201910060

投稿2019/10/08 00:53

kodai

総合スコア759

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tuti

2019/10/08 02:29

From句に2つのテーブルを書く発想に驚きました。 参考にして、上記のテーブルイメージを作成してから、 集計するという事で実際に出来ました。 大変感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問