以下のプログラムは年月と売上個数を出すものです。
このプログラムにさらに、翌月のデータ(年月200103、売上個数0)が表示されるようにしたいのですが、うまくできません。
yearテーブルとmonthテーブルを使って文字列を連結させればなんとかなりそうだとおもったのですが、できませんでした。
日付はchar型のままでやりたいです。
二つのテーブルをまたいで文字列を連結し、さらにその連結した文字列を用いて
ほかのテーブルと連結したいです。
以下のプログラムでは、おそらくLEFT JOIN以下が間違っていると思うのですが、どのようにすればよいでしょうか。
SELECT SUBSTR(ORDERS.DAY,1,4), NVL(SUM(ORDERS.CNT),0),
CONCAT(YEAR.VAL,MONTH.VAL)
FROM ORDERS LEFT JOIN YEAR, MONTH
ON SUBSTR(ORDERS.DAY,1,4) = CONCAT(YEAR.VAL, MONTH.VAL)
GROUP BY SUBSTR(ORDERS.DAY,1,4), CONCAT(YEAR.VAL, MONTH.VAL)
-- ORDERテーブル
CREATE TABLE ORDERS (
NO CHAR(4) NOT NULL PRIMARY KEY, -- 注文NO
DAY CHAR(8) NOT NULL, -- 日付
CODE CHAR(3) NOT NULL, -- 商品コード
CNT NUMBER(5) NOT NULL -- 個数
);
-- 年
CREATE TABLE YEAR (
VAL CHAR(4) NOT NULL PRIMARY KEY
);
-- 月
CREATE TABLE MONTH (
VAL CHAR(2) NOT NULL PRIMARY KEY
);
INSERT INTO ORDERS VALUES ('0001', '20001214', '002', 10);
INSERT INTO ORDERS VALUES ('0002', '20001214', '002', 15);
INSERT INTO ORDERS VALUES ('0003', '20001214', '003', 30);
INSERT INTO ORDERS VALUES ('0004', '20001215', '003', 12);
INSERT INTO ORDERS VALUES ('0005', '20010101', '001', 8);
INSERT INTO ORDERS VALUES ('0006', '20010101', '002', 11);
INSERT INTO ORDERS VALUES ('0007', '20010123', '002', 60);
INSERT INTO ORDERS VALUES ('0008', '20010205', '001', 36);
INSERT INTO YEAR VALUES ('2000');
INSERT INTO YEAR VALUES ('2001');
INSERT INTO MONTH VALUES ('01');
INSERT INTO MONTH VALUES ('02');
INSERT INTO MONTH VALUES ('03');
INSERT INTO MONTH VALUES ('04');
INSERT INTO MONTH VALUES ('05');
INSERT INTO MONTH VALUES ('06');
INSERT INTO MONTH VALUES ('07');
INSERT INTO MONTH VALUES ('08');
INSERT INTO MONTH VALUES ('09');
INSERT INTO MONTH VALUES ('10');
INSERT INTO MONTH VALUES ('11');
INSERT INTO MONTH VALUES ('12');
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/04 11:41