Stored Procedures
と同じwhere句のジョインを持つStored Procedures
がありますが、唯一の違いはFROM
という表です。可能であれば、複製を削除したいと思います。これは実施例である:ジョインなどでクエリを簡略化する方法
SELECT x.Month_Name
, x.Invoice_Amt
, y.Payment_Amt
FROM
(
SELECT d.Month_Name
, d.Month
, sum(i.Amount) AS Invoice_Amt
FROM Invoice i
INNER JOIN DATE d ON i.Trans_Date = d.PK_Date
WHERE d.Month BETWEEN '2016-01-01' AND '2016-02-01'
AND i.Account = '1-AAA'
GROUP BY d.Month
, d.Month_Name
) x
JOIN
(
SELECT d.Month_Name
, sum(p.Amount) AS Payment_Amt
FROM Payment p
INNER JOIN DATE d ON p.Payment_Date = d.PK_Date
WHERE d.Month BETWEEN '2016-01-01' AND '2016-02-01'
AND p.Account = '1-AAA'
GROUP BY d.month
, d.month_Name
) y ON x.Month_Name = y.Month_Name
ORDER BY x.Month
, x.Month_Name;
これは私が目指してるものの非稼働例です。私は、SQLフィドルが働いて得ることができないように、データベーススキーマ
SELECT d.Month_Name
, d.Month
, sum(i.Amount) AS Invoice_Amt
, sum(p.Amount) AS Payment_Amt
FROM Invoice i
INNER JOIN DATE d ON i.Trans_Date = d.PK_Date
JOIN Payment p ON i.Account = p.Account
WHERE d.Month BETWEEN '2016-01-01' AND '2016-02-01'
AND i.Account = '1-AAA'
GROUP BY d.Month
, d.Month_Name
ORDER BY d.Month
, d.Month_Name;
。
CREATE TABLE Date
(PK_Date datetime,
Month datetime,
Month_Name varchar(20));
INSERT INTO Date
VALUES
('2016-01-01', '2016-01-01', 'January 2016'),
('2016-01-15', '2016-01-01', 'January 2016'),
('2016-02-04', '2016-02-01', 'February 2016'),
('2016-02-15', '2016-02-01', 'February 2016');
CREATE TABLE Invoice
(Account varchar(15),
Trans_Date datetime,
Amount float);
INSERT INTO Invoice
VALUES
('1-AAA', '2016-01-01', 521.32),
('1-AAA', '2016-02-04', 854.20);
CREATE TABLE Payment
(Account varchar(15),
Payment_Date datetime,
Amount float);
INSERT INTO Payment
VALUES
('1-AAA', '2016-01-15', 410.50),
('1-AAA', '2016-02-15', 120.98);