CREATE TABLE sales_data1 (
    sales_date DATE,
    product_id INT,
    month_id INT,
    region_id INT,
    sales INT,
    cost INT,
    profit INT
);
GO

CREATE TABLE sales_data2 (
    sales_date DATE,
    product_id INT,
    month_id INT,
    region_id INT,
    sales INT,
    cost INT,
    profit INT
);
GO

-- sales_data1へのデータの挿入
INSERT INTO sales_data1 (sales_date, product_id, month_id, region_id, sales, cost, profit) VALUES
('2023-01-01',1,1,1,50000,30000,20000),
('2023-01-02',1,1,1,60000,35000,25000),
('2023-01-03',1,1,1,55000,32000,23000),
('2023-01-04',1,1,1,58000,36000,22000),
('2023-01-05',1,1,2,62000,40000,22000),
('2023-01-06',1,1,2,57000,39000,18000),
('2023-01-07',1,1,2,59000,37000,22000),
('2023-01-08',1,1,2,61000,41000,20000),
('2023-01-09',1,1,2,63000,42000,21000),
('2023-01-10',1,1,1,64000,43000,21000),
('2023-01-11',1,1,1,65000,44000,21000),
('2023-01-12',1,1,1,66000,45000,21000);

-- sales_data2へのデータの挿入
INSERT INTO sales_data2 (sales_date, product_id, month_id, region_id, sales, cost, profit) VALUES
('2023-02-01',2,2,1,40000,25000,15000),
('2023-02-02',2,2,1,45000,28000,17000),
('2023-02-03',2,2,2,46000,29000,17000),
('2023-02-04',2,2,2,47000,31000,16000),
('2023-02-05',2,2,2,48000,32000,16000),
('2023-02-06',2,2,1,49000,33000,16000),
('2023-02-07',2,2,1,50000,34000,16000),
('2023-02-08',2,2,1,52000,36000,16000),
('2023-02-09',2,2,1,53000,37000,16000),
('2023-02-10',2,2,2,54000,38000,16000),
('2023-02-11',2,2,2,55000,39000,16000),
('2023-02-12',2,2,2,56000,40000,16000);


CREATE TABLE sales_work (
    sales_date DATE,
    product_id INT,
    month_id INT,
    region_id INT,
    sales INT,
    cost INT,
    profit INT
);
GO

CREATE TABLE sales (
    sales_date DATE,
    product_id INT,
    month_id INT,
    region_id INT,
    sales INT,
    cost INT,
    profit INT
);
GO


CREATE PROCEDURE LoadSalesData
AS
BEGIN
    INSERT INTO sales_work SELECT * FROM sales_data1;
    INSERT INTO sales SELECT * FROM sales_work;
    
    TRUNCATE TABLE sales_work;

    INSERT INTO sales_work SELECT * FROM sales_data2;
    INSERT INTO sales SELECT * FROM sales_work;
END
GO

-- ストアドプロシージャを実行
EXEC LoadSalesData;


-- salesテーブルにデータが入っているか確認するためのやつ
-- SELECT * FROM sales;


-- 時間テーブル作成
CREATE TABLE time_data (
    month_id INT,
    month DATE,
    quarter VARCHAR(2),
    year INT
);
GO

INSERT INTO time_data (month_id, month, quarter, year) VALUES
(1,'2023-01-01','Q1',2023),
(2,'2023-02-01','Q1',2023),
(3,'2023-03-01','Q1',2023),
(4,'2023-04-01','Q2',2023),
(5,'2023-05-01','Q2',2023),
(6,'2023-06-01','Q2',2023),
(7,'2023-07-01','Q3',2023),
(8,'2023-08-01','Q3',2023),
(9,'2023-09-01','Q3',2023),
(10,'2023-10-01','Q4',2023),
(11,'2023-11-01','Q4',2023),
(12,'2023-12-01','Q4',2023);


-- 商品テーブルを作成
CREATE TABLE product_data (
    product_id INT,
    product_name VARCHAR(255),
    category VARCHAR(255)
);
GO

INSERT INTO product_data (product_id, product_name, category) VALUES
(1,'product_A','home appliance'),
(2,'product_B','furniture');

-- 地域テーブルを作成
CREATE TABLE region_data (
    region_id INT,
    region_name VARCHAR(255),
    country VARCHAR(255)
);
GO

INSERT INTO region_data (region_id, region_name, country) VALUES
(1,'Tokyo','Japan'),
(2,'Osaka','Japan');

GO

-- Viewを作成(ディメンションテーブルとファクトテーブルを結合し、必要なデータのみSELECTに含める)
CREATE VIEW sales_view AS
SELECT 
    sales.sales_date, 
    time_data.month, 
    time_data.quarter, 
    time_data.year, 
    product_data.product_name, 
    product_data.category, 
    region_data.region_name, 
    region_data.country,
    sales.sales, 
    sales.cost, 
    sales.profit
FROM
    sales
INNER JOIN time_data
    ON sales.month_id = time_data.month_id
INNER JOIN product_data
    ON sales.product_id = product_data.product_id
INNER JOIN region_data
    ON sales.region_id = region_data.region_id;
GO
-- 最終的な出力
SELECT
    *
FROM
    sales_view