0

注文 ID と出荷日を含む注文ファイルがあります。注文は月曜日から金曜日にのみ発送できます。これは、土曜日と日曜日に選択されたレコードがないことを意味します。

同じ注文ファイルを使用して、すべての注文日を同じ形式 (yyyymmdd) で取得します。

注文日に基づいて注文ファイルからすべてのレコードの数を選択したい...そして(私は信じている)完全外部結合(またはおそらく正しい結合?)日付ファイル...見たいので

20120330 293

20120331 0

20120401 0

20120402 920

20120403 430

20120404 827

等...

ただし、私のSQLステートメントはまだ31日と1日のゼロレコードを返していません。

with DatesTable as (
   select ohordt "Date" from kivalib.orhdrpf
   where ohordt between 20120315 and 20120406
   group by ohordt order by ohordt
)

SELECT ohscdt, count(OHTXN#) "Count"

FROM KIVALIB.ORHDRPF full outer join DatesTable dts on dts."Date" = ohordt
--/*order status = filled & order type = 1 & date between (some fill date range)*/

WHERE OHSTAT = 'F' AND OHTYP = 1 and ohscdt between 20120401 and 20120406

GROUP BY ohscdt ORDER BY ohscdt

私が間違っていることは何ですか?

ありがとう!

4

1 に答える 1

0

その日のデータがないため、行として表示されません。再帰 CTE を使用して、クエリが結合できる 2 つの値の間の連続した日付のリストを作成できます。

次のようになります。

WITH dates (val) AS (
    SELECT CAST('2012-04-01' AS DATE)
    FROM SYSIBM.SYSDUMMY1
        UNION ALL
    SELECT Val + 1 DAYS
    FROM dates
    WHERE Val < CAST('2012-04-06' AS DATE)
)

SELECT d.val AS "Date", o.ohscdt, COALESCE(COUNT(o.ohtxn#), 0) AS "Count"
FROM dates AS d
LEFT JOIN KIVALIB.ORDHRPF AS o
  ON o.ohordt = TO_CHAR(d.val, 'YYYYMMDD')
WHERE o.ohstat = 'F'
  AND o.ohtyp = 1
于 2012-04-06T20:35:27.843 に答える