1

对此有一些问题,但我找不到适合我的相关结果。我有一个查询,它给了我 2 列结果:

 Day            Tot_dLS   
 01-Sep-12      10000
 02-Sep-12      9920

我想转置日期,使其显示为:

01-Sep-12    02-Sep-12 
10000         9920

这可能吗?

4

4 回答 4

1

不是真的使用 SQL 查询,因为同一列必须包含两种不同的数据类型。您可以通过一些技巧(将所有内容转换为字符串)来解决问题 - 但是在演示应用程序或报告本身中比在查询中完成这些事情要好得多。

于 2012-09-18T17:49:21.887 回答
1

由于您可以返回固定数量的列并且可以使用通用列名,因此您可以执行标准的数据透视查询

SELECT max( case when rn = 1 then tot_dls else null end ) col_1,
       max( case when rn = 2 then tot_dls else null end ) col_2,
       max( case when rn = 3 then tot_dls else null end ) col_3,
       <<25 more>>
       max( case when rn = 29 then tot_dls else null end ) col_29,
       max( case when rn = 30 then tot_dls else null end ) col_30
  FROM (SELECT day,
               tot_dls,
               rank() over (order by day) rn
          FROM your_table
         WHERE day between date '2012-09-01' 
                       and date '2012-09-02' -- Use whatever criteria you want here
       )
于 2012-09-18T18:07:53.293 回答
1

这段代码:

create table your_table(day date, tot_dls number(5));
insert into your_table values ('01-SEP-2012',10000);
insert into your_table values ('02-SEP-2012',9920);
insert into your_table values ('03-SEP-2012',12020);
insert into your_table values ('04-SEP-2012',11030);

column dummy noprint
column "Header" format a7
column "Data"   format a60
set hea off
SELECT 0 DUMMY
      ,'Day'                                      "Header"
      ,LISTAGG(' ' || TO_CHAR(Day,'DD-MON-YYYY')) WITHIN GROUP (ORDER BY Day) "Data"
FROM  your_table
UNION
SELECT 1
      ,'Tot_dls'
      ,LISTAGG(LPAD(TOT_DLS,13-LENGTH(TO_CHAR(TOT_DLS,'FM')),' ')) WITHIN GROUP (Order by Day)
FROM your_table
ORDER by 1;

在 Oracle 11g (11.2.0) 数据库上使用 SQL*Plus 生成此输出。

Day      01-SEP-2012 02-SEP-2012 03-SEP-2012 04-SEP-2012
Tot_dls        10000        9920       12020       11030
于 2012-10-16T14:43:20.307 回答
0

您可以使用CASE语句和聚合来执行此操作。你可以使用这样的东西:

select max(case when day = '01-Sep-12' then Tot_dLS end) "01-Sep-12",
       max(case when day = '02-Sep-12' then Tot_dLS end) "02-Sep-12",
       ........ add more columns here
from yourtable

然后这将被扩展以添加更多列。

于 2012-09-18T17:47:08.240 回答