Mysql 使用Select或PL SQL进行转置

Mysql 使用Select或PL SQL进行转置,mysql,sql,oracle,plsql,Mysql,Sql,Oracle,Plsql,我在MySQL中有一个select查询,如下所示: 此查询以表的形式执行并生成结果 Current | Past1 | Past2 | Past 3 | Past4 200 600 800 000 88 ----------------------------------------------- 我想转置这些结果以获得表单中的信息:因此我想转置reults Current 200 Past1 600 Past2

我在MySQL中有一个select查询,如下所示: 此查询以表的形式执行并生成结果

Current | Past1  | Past2  | Past 3  |  Past4
   200     600      800      000         88
-----------------------------------------------
我想转置这些结果以获得表单中的信息:因此我想转置reults

Current    200
Past1      600
Past2      800
Past3      000
Past4       88
这可以使用oracle中的SQL语句来完成,还是需要一个PL SQL过程来完成。如果是PL SQL,您可以提供对它的一些示例引用


你可以用一个SQL语句来完成,你可以把你的案例逻辑添加到我下面的模板中,我只是想向你展示一下基本的想法,就是使用union

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)

像这样的怎么样:

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'
依此类推,每行?

重复的?
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'