我在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'
答案 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'
每行等等?