Требуется помощь в разделении данных на столбцы

#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 Вот выходные данные, которые я получаю из этого запроса. Я просто хочу просто разделить каждый из этих результатов на отдельно помеченные столбцы.