Я пытаюсь вывести ежедневные, еженедельные, ежемесячные и летние заказы и сумму этих заказов между этими временными диапазонами. На данный момент я придумал следующее. Его длинный, но его просто экземпляр и вставка работы того же самого заявления были слегка изменены для группировки по году, месяцу, неделе и день.Группировка диапазонов дат за строку
SELECT YEAR(s.LastUpdated) AS 'Year', 0 AS 'Month', 0 AS 'Week', 0 AS 'Day', count(rowId) AS 'Transactions', ROUND(SUM(Amount),2) AS 'Partner Cut'
FROM gfw_orders AS o
JOIN gfw_sage_orders AS s
ON o.sageRef = s.VendorTxCode
WHERE YEAR(s.LastUpdated) = 2011
GROUP BY
YEAR(s.LastUpdated)
UNION
SELECT YEAR(s.LastUpdated) AS 'Year', MONTHNAME(s.LastUpdated) AS 'Month', 0 AS 'Week', 0 AS 'Day', count(rowId) AS 'Transactions', ROUND(SUM(Amount),2) AS 'Partner Cut'
FROM gfw_orders AS o
JOIN gfw_sage_orders AS s
ON o.sageRef = s.VendorTxCode
WHERE MONTH(s.LastUpdated) = 1
GROUP BY
YEAR(s.LastUpdated), MONTH(s.LastUpdated)
UNION
SELECT YEAR(s.LastUpdated) AS 'Year', MONTHNAME(s.LastUpdated) AS 'Month', WEEKOFYEAR(s.LastUpdated) AS 'Week', 0 AS 'Day', count(rowId) AS 'Transactions', ROUND(SUM(Amount),2) AS 'Partner Cut'
FROM gfw_orders AS o
JOIN gfw_sage_orders AS s
ON o.sageRef = s.VendorTxCode
WHERE WEEK(s.lastUpdated) = 4
GROUP BY
YEAR(s.LastUpdated), MONTH(s.LastUpdated), WEEK(s.LastUpdated)
UNION
SELECT YEAR(s.LastUpdated) AS 'Year', MONTHNAME(s.LastUpdated) AS 'Month', WEEKOFYEAR(s.LastUpdated) AS 'Week', DAY(s.lastUpdated), count(rowId) AS 'Transactions', ROUND(SUM(Amount),2) AS 'Partner Cut'
FROM gfw_orders AS o
JOIN gfw_sage_orders AS s
ON o.sageRef = s.VendorTxCode
WHERE DAY(s.LastUpdated) = 26
GROUP BY
YEAR(s.LastUpdated), MONTH(s.LastUpdated), WEEK(s.LastUpdated), DAY(s.LastUpdated)
Каких выходы
Year Month Week Day Count Amount
2011 0 0 0 3 285.00
2011 January 0 0 3 285.00
2011 January 4 0 2 190.00
2011 January 4 26 1 95.00
который является идеальным выходом обеспечивая год, месяц, неделю, ежедневно счетов и сделки сумму, которая может быть выдана соответствующим образом. Однако это только для одного типа порядка. В таблице заказов есть два типа заказов: онлайн и терминал, и в идеале я хотел бы выводить оба типа в один и тот же запрос, а не запрашивать базу данных несколько раз.
У меня есть два вопроса, с которыми у меня возникают проблемы. Во-первых, есть ли более простой способ добиться того же результата? Я не хочу усложнять его, потому что ведущий на второй вопрос, потому что некоторые заказы отличаются, и я хотел бы, чтобы результат показывал как онлайн-заказы, так и заказы на терминал, если я просто копирую и UNION код, который у меня уже есть, WHERE Terminal = 1 'из-за объединения результаты одинаковы. Есть ли способ вывода двух наборов выходов в одном запросе?
Я, вероятно, слишком усложняю то, к чему я стремился, но заблаговременно за любые советы или указатели.