使用Select或PL SQL进行转置

时间:2009-11-17 20:45:49

标签: mysql sql oracle plsql

我在MySQL中有一个select查询,如下所示: 此查询以表格

的形式执行并生成结果
Current | Past1  | Past2  | Past 3  |  Past4
   200     600      800      000         88
-----------------------------------------------

我想转换这些结果以获取表单中的信息:因此我希望结果是(转置)

Current    200
Past1      600
Past2      800
Past3      000
Past4       88

可以使用oracle中的SQL语句完成此操作,还是需要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'

2 个答案:

答案 0 :(得分:0)

你可以用一个SQL语句来做(你可以将你的“case”逻辑添加到我下面的模板中,我只是想告诉你基本的想法,即使用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)

答案 1 :(得分: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'
每行

等等?