#sql #count #pivot #aggregate-functions
#sql #граф #поворотный #агрегатные функции
Вопрос:
В настоящее время я использую SQL на работе для запроса базы данных для отображения определенной информации. У меня есть каждый элемент, который извлекается как отдельные объекты. Всякий раз, когда я запускаю запрос, мои результаты отображаются только в одном столбце. Есть ли способ разделить эти данные на отдельные столбцы на основе псевдонима?
SELECT
count(o.orderid) AS Current_Daily
FROM
orders o
WHERE
o.ship_dt BETWEEN '2020-11-09 00:00:00' AND '2020-11-15 23:59:59'
AND o.orderstatus = 2
UNION
#UNION ALL
SELECT
count(o.orderid) AS Previous_Daily
FROM
orders o
WHERE
o.ship_dt BETWEEN '2019-11-09 00:00:00' AND '2019-11-15 23:59:59'
AND o.orderstatus = 2
UNION
#UNION ALL
SELECT
count(o.orderid) AS Current_Monthly
FROM
orders o
WHERE
o.ship_dt BETWEEN '2020-11-01 00:00:00' AND '2020-11-15 23:59:59'
AND o.orderstatus = 2
UNION
#UNION ALL
SELECT
count(o.orderid) AS Previous_Monthly
FROM
orders o
WHERE
o.ship_dt BETWEEN '2019-11-01 00:00:00' AND '2019-11-15 23:59:59'
AND o.orderstatus = 2
;
Любая помощь будет с благодарностью принята.
Комментарии:
1. Пометьте свой вопрос базой данных, которую вы используете. Образцы данных и желаемые результаты могли бы помочь. Непонятно, почему вы повторяете два одних и тех же запроса дважды, за исключением псевдонима столбца.
Ответ №1:
Используйте условную агрегацию, как в:
select
sum(case when ship_dt >= '2020-11-09' and ship_dt < '2020-11-15' then 1 else 0 end) as current_daily,
sum(case when ship_dt >= '2020-11-01' and ship_dt < '2020-11-15' then 1 else 0 end) as current_monthly,
... -- more conditional "sum()"s if needed
from orders o
where orderstatus = 2
Ответ №2:
Вероятно, вам просто нужна условная агрегация. Что-то вроде этого:
SELECT SUM(CASE WHEN o.ship_dt >= '2020-11-09' AND o.ship_dt < '2020-11-16' THEN 1 ELSE 0 END) AS Current_Daily,
SUM(CASE WHEN o.ship_dt >= '2020-11-01' AND o.ship_dt < '2020-11-16' THEN 1 ELSE 0 END) AS Current_Monthly,
FROM orders o
WHERE o.orderstatus = 2;
Вы можете добавить дополнительные столбцы, используя аналогичную логику.
Комментарии:
1. Похоже, это не работает, мне нужно разделить эти данные, я не был уверен, прояснил я это или нет. Каждый вывод должен существовать сам по себе. Я просто пытаюсь создать более разборчивое считывание, в котором точно указано, что отображается
2. count(o.orderid) 462 573 841 1321 Вот выходные данные, которые я получаю из этого запроса. Я просто хочу просто разделить каждый из этих результатов на отдельно помеченные столбцы.