締切済み

oracle SQL

  • すぐに回答を!
  • 質問No.9547170
  • 閲覧数66
  • ありがとう数0
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 4% (7/142)

売上情報を日別に集計して抽出しようと考えております。
その際に売上が存在しない日のレコードも纏めて抽出したいと考えております。
以下のように日付一覧を副問合せで生成し、left joinすれば良いかと
考えたのですが、結果は売上が存在するレコードしか抽出されません。
下記のSQLでは何が原因で全日付が抽出されないのか分る方がいらっしゃいましたらご教授頂けますと幸いです。

select
売明.商品コード,
売伝.納品日,
月日.全日,
-- TO_CHAR(売伝.納品日,'DY') AS 曜日,
TO_CHAR(月日.全日,'DD') AS 日,
TO_CHAR(月日.全日,'DY') AS 曜日
-- count(売明.商品コード) AS 売上回数

from
売上伝票データ 売伝,
売上明細データ 売明,
(
SELECT
TO_DATE('20180401', 'YYYYMMDD') + ROWNUM - 1 AS 全日
FROM
ALL_CATALOG
WHERE
TO_DATE('20180401', 'YYYYMMDD') + ROWNUM - 1 <= TO_DATE('20180430', 'YYYYMMDD')
ORDER BY 1
) 月日

where
売伝.納品日 BETWEEN TO_DATE('20180401','YYYY/MM/DD') AND TO_DATE('20180430','YYYY/MM/DD') AND
月日.全日 = 売伝.納品日(+) AND
売伝.売上伝票番号 = 売明.売上伝票番号 AND
売明.商品コード = '009405'

回答 (全1件)

  • 回答No.1

ベストアンサー率 0% (0/2)

(+) を使った書き方だと、結合条件と抽出条件の区別が曖昧になります。

>売伝.納品日 BETWEEN TO_DATE('20180401','YYYY/MM/DD') AND TO_DATE('20180430','YYYY/MM/DD')

これだと、売伝.納品日が null になるデータは抽出されません。

標準SQL の書き方だと、はっきりと区別できます。

select
売明.商品コード,
売伝.納品日,
月日.全日,
-- TO_CHAR(売伝.納品日,'DY') AS 曜日,
TO_CHAR(月日.全日,'DD') AS 日,
TO_CHAR(月日.全日,'DY') AS 曜日
-- count(売明.商品コード) AS 売上回数

from
(
SELECT
TO_DATE('20180401', 'YYYYMMDD') + ROWNUM - 1 AS 全日
FROM
ALL_CATALOG
WHERE
TO_DATE('20180401', 'YYYYMMDD') + ROWNUM - 1 <= TO_DATE('20180430', 'YYYYMMDD')
ORDER BY 1
) 月日
left join 売上伝票データ 売伝 on 月日.全日 = 売伝.納品日
left join (select * from 売上明細データ where 商品コード = '009405'
) 売明 on 売伝.売上伝票番号 = 売明.売上伝票番号

こんな感じ。
たいせつな将来のこと。あえて、知らない人に聞いてみよう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


OKWAVE若者応援スペシャル企画

ピックアップ

ページ先頭へ