關於oracle和db2中的縱表轉橫表的例子

2021-08-26 19:21:31 字數 1593 閱讀 3403

在資料庫開發的過程中,經常會遇到把縱表的資料轉換為橫表展示出來。今天我就把經常遇到的實現的方法總結出來,還請大家指點錯誤啊。或者有更好的方法,也可以讓我學習學習。

---以下指令碼是在db2中實現的

第乙個:縱表轉橫表的"sql"示例

縱表結構: test_vip

acct_month 卡級別 數量

201201 鑽卡 1

201201 金卡 2

201201 銀卡 3

轉換後顯示如下

acct_month 鑽卡數量 金卡數量 銀卡數量

201201 1 2 3

實現思路為先將表中的資料構造成需要展示的列數,再在最外層將此值全部累加即可。

實現的sql為:

select acct_month,

sum(zk_count),

sum(jk_count),

sum(yk_count)

from (select acct_month,

case when card_level = '鑽卡' then card_count end as zk_count,

case when card_level = '金卡' then card_count end as jk_count,

case when card_level = '銀卡' then card_count end as yk_count

from test_vip

) group by acct_month;

第二個:

表結構如下:

表1 表2

欄位1 欄位2 欄位3 欄位4

a 1 a 1,2,3

a 2 b 5,6

a 3 c 7,8,9

b 5b 6

c 7c 8

c 9轉換要求:

使用sql實現,彙總表1欄位1,欄位2值用逗號隔開寫入表2欄位4

實現的sql為:

create table test_lyq(f1 varchar(3), f2 integer);

insert into test_lyq

values

('a',1),

('a',2),

('a',3),

('b',5),

('b',6),

('c',7),

('c',8),

('c',9);

with tmp(c1,c2,c3) as

(select f1,f2,char(f2) from test_lyq

where (f1,f2) in (select f1,min(f2) from test_lyq group by f1)

union all

select t1.c1,t1.c2+1,rtrim(t1.c3)||','||rtrim(char(t2.f2)) from tmp t1 , test_lyq t2

where t1.c1 = t2.f1 and t1.c2+1 = t2.f2

)select c1,c3 from tmp where (c1,c2) in (select f1,max(f2) from test_lyq group by f1);

關於DB2的使用(DB2資料命令)

公司所用的資料庫有金倉和db2 首先要用命令視窗直接開啟db2需要在cmd中輸入 db2cmd 1 啟動db2資料庫 db2start 2 連線資料庫 db2 connect to 資料庫名稱 3 建立資料庫 db2 create db 資料庫名稱 4 刪除資料庫 db2 drop db 資料庫名稱...

Oracle和DB2的部分SQLCODE對應表

最近在做oracle到db2的轉換,整理了部分sqlcode的對應關係,部分已經新增了中文描述 因為轉換的程式為pro c程式,增加了sqlcode的巨集定義 sqlcode巨集定義 oracle db2中 描述 m no data found 1403 100未能找到資料 m dup val on...

DB2和ORACLE的印象比較

乙個專案需要 db2,以前沒用過,用了windows 2008下的db29.7 好幾周,算入門了吧,下面這文章就當乙個 oracle使用者眼裡的db2的印象吧,也許有些東西可能有偏差,但是就是我自己的印象 2 管理工具,db2的管理工具做得太簡陋了,控制中心只能說能用而已,而且還有好多bug,不如o...