将一些SQL列转换为行

时间:2013-12-12 13:45:51

标签: sql oracle

ID  YEAR    FORCE   NEIGHBOURHOOD   ALL_CRIME   ANTI_SOCIAL_BEHAVIOUR   BURGLARY    CRIMINAL_DAMAGE_AND_ARSON   DRUGS   OTHER_THEFT PUBLIC_DISORDER_AND_WEAPONS ROBBERY SHOPLIFTING VEHICLE_CRIME   VIOLENT_CRIME   OTHER_CRIME
1   2013-03 Police  AAN_HP  290 91  27  33  11  64  8   6   3   14  27  6

我需要将论文的顺序改为

ID  1
YEAR    2012
FORCE   Police
NEIGHBOURHOOD   Bradford
ALL_CRIME   12345
ANTI_SOCIAL 87
BURGLARY    10
CRIMINAL_DAMAGE 20
DRUGS   15
OTHER_THEFT 30

3 个答案:

答案 0 :(得分:1)

如果您想更改列返回的顺序,请更改您选择它们​​的顺序

SELECT 1,2,3 FROM t

将以不同于

的方式返回

SELECT 2,1,3 FROM t

我不知道这是不是你想要的,但我发现这个问题令人费解!

答案 1 :(得分:0)

查询非常简单:

with lvls as (select /* + materialize */ level lv from dual connect by level <= 9)
select id,
       decode(lv,
              1,'year',
              2,'force'),
              ...
       decode(lv,
              1,to_char(year),
              2,to_char(force),
              ...
from yourtable, lvls
order by id,lv;

提示“实体化”不会使Oracle无法满足(他喜欢先在这里加入表格,然后再运行层次结构,如果你没有指定这个提示)

答案 2 :(得分:0)

  • 试试这个

     select * from your_tab unpivot(col2 for col1 in(ID,YEAR,FORCE,NEIGHBOURHOOD, ALL_CRIME,ANTI_SOCIAL_BEHAVIOUR);
    
  • 注意:col1中提到的所有列必须具有相同的数据类型