環境:oracle 11g pl/sql 橫縱表相互轉化 項目中有時候會用到把縱表轉化成橫表,或是橫表轉化成縱表,以下是我在請教別人和自己思考後想到的方法。以下提供一個小實例,供大家參考。 縱表轉橫表 1、縱表如下: 說明:共有四個城市,和四個項目,每個城市最多有四個項目。 2、轉化成橫表如下: S ...
環境:oracle 11g pl/sql
橫縱表相互轉化
項目中有時候會用到把縱表轉化成橫表,或是橫表轉化成縱表,以下是我在請教別人和自己思考後想到的方法。以下提供一個小實例,供大家參考。
縱表轉橫表
1、縱表如下:
說明:共有四個城市,和四個項目,每個城市最多有四個項目。
2、轉化成橫表如下:
Sql:
select project,
sum(case city when '唐山市' then value else 0 end ) 唐山市,
sum(case city when '滄州市' then value else 0 end ) 滄州市,
sum(case city when '承德市' then value else 0 end ) 承德市,
sum(case city when '保定市' then value else 0 end ) 保定市
from portrait
group by project
order by project;
說明:sum函數使用主要是因為group by 的原因,其實上述語句的每一個單元格只會查出一條數據,用sum函數不會對結果產生影響。
橫表轉縱表
1、橫表如下:(就是上面的縱表轉橫表的結果)
2、轉化成縱表(最初的縱表)
Sql:
select '唐山市' city,project,唐山市 value from transverse where 唐山市>0 union all
select '滄州市' city,project,滄州市 value from transverse where 滄州市>0 union all
select '承德市' city,project,承德市 value from transverse where 承德市>0 union all
select '保定市' city,project,保定市 value from transverse where 保定市>0 ;
說明:'唐山市',帶單引號的表示字元串,唐山市,不帶單引號的表示列名,大家註意下,列名最好不要這樣起成中文。
縱表轉橫表,有字元串類型的數據
解決辦法:sum函數改為max/min
MAX()和MIN()函數不僅可以作用於數值型數據,也可以作用於字元串或是日期時間數據類型的數據。
1、縱表如下:
說明:Value_1 是varchar2類型
2、轉化成橫表
Sql:
select project,
max(case city when '唐山市' then value_1 else '' end ) 唐山市,
max(case city when '滄州市' then value_1 else '' end ) 滄州市,
max(case city when '承德市' then value_1 else '' end ) 承德市,
max(case city when '保定市' then value_1 else '' end ) 保定市
from portrait
group by project
order by project;
記錄自己的學習點滴,與君共勉。