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