Используйте Select или PL SQL для транспонирования

0

У меня есть запрос select в MySQL, показанный ниже: Этот запрос выполняет и производит результаты в виде таблицы

Current | Past1  | Past2  | Past 3  |  Past4
   200     600      800      000         88
-----------------------------------------------

Я хотел бы перенести эти результаты, чтобы получить информацию в форме: Поэтому я хотел бы, чтобы результаты были (транспонированы)

Current    200
Past1      600
Past2      800
Past3      000
Past4       88

Можно ли это сделать с помощью инструкции SQL в oracle или мне нужна процедура PL SQL для этого. Если PL SQL вы можете предоставить ему некоторую примерную ссылку.


select
sum(case
    when CPT_ORIGINATED > SUBDATE(DATE(NOW()),30) THEN 1 else 0
    end) as Current,
sum(case
    when CPT_ORIGINATED > SUBDATE(DATE(NOW()),60) AND CPT_ORIGINATED < SUBDATE(DATE(NOW()),30) THEN 1 else 0
    end) as Past1,
sum(case
    when CPT_ORIGINATED > SUBDATE(DATE(NOW()),90) AND CPT_ORIGINATED < SUBDATE(DATE(NOW()),60) THEN 1 else 0
    end) as Past2,
sum(case
    when CPT_ORIGINATED > SUBDATE(DATE(NOW()),120) AND CPT_ORIGINATED < SUBDATE(DATE(NOW()),90) THEN 1 else 0
    end) as Past3,
sum(case
    when CPT_ORIGINATED > SUBDATE(DATE(NOW()),150) AND CPT_ORIGINATED < SUBDATE(DATE(NOW()),120) THEN 1 else 0
    end) as Past4
from `cpt-prod`
where CPT_STATE <> 'Closed'
Теги:
plsql

2 ответа

0
Лучший ответ

Как насчет чего-то вроде этого:

select 'Current' As TimePeriod,
sum(case when CPT_ORIGINATED > SUBDATE(DATE(NOW()),30) THEN 1 else 0
    end) as CountOfThings,
from `cpt-prod`
where CPT_STATE <> 'Closed'
UNION ALL
SELECT 'Past1' AS TimePeriod,
sum(case when CPT_ORIGINATED > SUBDATE(DATE(NOW()),60) AND CPT_ORIGINATED < SUBDATE(DATE(NOW()),30) THEN 1 else     0
    end) as CountOfThings,
from `cpt-prod`
where CPT_STATE <> 'Closed'

и т.д. для каждой строки?

0

Вы можете сделать это с помощью одного оператора SQL (вы можете добавить свою логику "case" к шаблону, который у меня ниже, я просто хотел показать вам основную идею, которая заключается в использовании объединения).

CREATE TABLE results (cur NUMBER, past1 number, past2 NUMBER, past3 NUMBER, past4 NUMBER);
INSERT INTO results VALUES(200,600,800,0,88);

SELECT NAME, val
FROM 
(SELECT 'current' NAME, cur val FROM results)
UNION ALL
(SELECT 'past1' NAME, past1 val FROM results)
UNION ALL
(SELECT 'past2' NAME, past2 val FROM results)
UNION ALL
(SELECT 'past3' NAME, past3 val FROM results)
UNION ALL
(SELECT 'past4' NAME, past4 val FROM results)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню