У меня есть запрос 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'
Как насчет чего-то вроде этого:
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'
и т.д. для каждой строки?
Вы можете сделать это с помощью одного оператора 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)