【问题标题】:Use Select or PL SQL to Transpose使用 Select 或 PL SQL 转置
【发布时间】:2009-11-17 20:45:48
【问题描述】:

我在 MySQL 中有一个选择查询,如下所示: 该查询以表格的形式执行并产生结果

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'

【问题讨论】:

标签: mysql sql oracle plsql


【解决方案1】:

这样的事情怎么样:

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'

每一行都以此类推?

【讨论】:

    【解决方案2】:

    您可以使用一条 SQL 语句来完成(您可以将您的“案例”逻辑添加到我下面的模板中,我只是想向您展示基本思想,即使用联合)。

    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)
    

    【讨论】:

      猜你喜欢
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      相关资源
      最近更新 更多