DECLARE @YourTable TABLE (
Customer varchar(100) ,
OrderedPeriod datetime,
DeliveredPeriod Datetime,
Employee varchar(100),
SalesAmount money
)
INSERT INTO @YourTable (Customer, OrderedPeriod, DeliveredPeriod, Employee, SalesAmount)
VALUES
('Acme', '1/1/2015', '2/15/2015', 'Mickey', 500.00),
('XXX' , '1/1/2015', '1/15/2015', 'Donald', 500.00),
('Acme', '2/1/2015', '2/15/2015', 'Goofey', 150.00),
('Acme', '3/6/2015', '3/15/2015', 'Goofey', 500.00),
('Acme', '2/1/2015', '3/15/2015', 'Goofey', 500.00),
('XXX' , '3/1/2015', '3/15/2015', 'Mickey', 400.00),
('Acme', '1/8/2015', '1/20/2015', 'Mickey', 500.00),
('Acme', '1/1/2015', '1/31/2015', 'Mickey', 500.00),
('XXX' , '1/1/2015', '1/30/2015', 'Mickey', 500.00),
('Acme', '1/1/2015', '2/07/2015', 'Donald', 300.00),
('Acme', '2/1/2015', '2/09/2015', 'Donald', 500.00),
('Acme', '1/1/2015', '2/10/2015', 'Mickey', 400.00),
('Acme', '1/1/2015', '2/15/2015', 'Mickey', 500.00)
SELECT
o.YearMonth
, o.OrderedNumberByMonth
, d.DeliveredNumberByMonth
, CONVERT(decimal(5, 2), d.DeliveredNumberByMonth * 100.0 / o.OrderedNumberByMonth) AS DeliveredPercent
FROM
(
SELECT
CONVERT(char(4), YEAR(OrderedPeriod)) + LEFT('0' + CONVERT(char(2), MONTH(OrderedPeriod)), 2) AS YearMonth
, COUNT(*) AS OrderedNumberByMonth
FROM @YourTable
GROUP BY CONVERT(char(4), YEAR(OrderedPeriod)) + LEFT('0' + CONVERT(char(2), MONTH(OrderedPeriod)), 2)
) AS o
INNER JOIN
(
SELECT
CONVERT(char(4), YEAR(DeliveredPeriod)) + LEFT('0' + CONVERT(char(2), MONTH(DeliveredPeriod)), 2) AS YearMonth
, COUNT(*) AS DeliveredNumberByMonth
FROM @YourTable
WHERE YEAR(OrderedPeriod) = YEAR(DeliveredPeriod) AND MONTH(OrderedPeriod) = MONTH(DeliveredPeriod)
GROUP BY CONVERT(char(4), YEAR(DeliveredPeriod)) + LEFT('0' + CONVERT(char(2), MONTH(DeliveredPeriod)), 2)
) AS d ON d.YearMonth = o.YearMonth
A Fan of SSIS, SSRS and SSAS
No comments:
Post a Comment