1.前言:通過使用FineBI進(jìn)行“點(diǎn)地圖”方式來展現(xiàn)數(shù)據(jù)。
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),綏寧企業(yè)網(wǎng)站建設(shè),綏寧品牌網(wǎng)站建設(shè),網(wǎng)站定制,綏寧網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,綏寧網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
2.遇到的問題:原始表 經(jīng)緯度 是一個字段保存,比如 xy列 中某行值為“130.111111,33.999999”。
3.解決的方法:通過 xy列 中’,‘逗號并使用函數(shù)substr()和函數(shù)instr() 處理后效果圖和SQL示例如下
4.附注:
substr函數(shù)的用法 :
取得字符串中指定起始位置和長度的字符串 ,默認(rèn)是從起始位置到結(jié)束的子串。
substr( string, start_position, [ length ] )? ? 即:? substr('目標(biāo)字符串',開始位置,長度)
instr函數(shù)的用法 :
格式一:instr( string1, string2 )? ?即:? instr(源字符串, 目標(biāo)字符串),本案例是使用此格式。
格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] )? ?即:instr(源字符串, 目標(biāo)字符串, 起始位置, 匹配序號)
解析:string2 的值要在string1中查找,是從start_position給出的數(shù)值(即:位置)開始在string1檢索,檢索第nth_appearance(幾)次出現(xiàn)string2。
instr是一個非常好用的字符串處理函數(shù),幾乎所有的字符串分隔都用到此函數(shù)。
方法有如下兩種:
1、利用存儲過程,先查出所要的數(shù)據(jù),循環(huán)放入一列中:
select 編碼,decode(一級,null,null,一級||'')||decode(二級,null,null,二級||'')||decode(三級,null,null,三級||'')||decode(四級,null,null,四級||'') from 表名
2、使用wm_concat()方法,如select wm_concat(name) as name from user;
Oracle?11g 行列互換 pivot 和 unpivot 說明在Oracle 11g中,Oracle 又增加了2個查詢:pivot(行轉(zhuǎn)列) 和unpivot(列轉(zhuǎn)行)
參考:、 一下,網(wǎng)上有一篇比較詳細(xì)的文檔:
pivot 列轉(zhuǎn)行
測試數(shù)據(jù) (id,類型名稱,銷售數(shù)量),案例:根據(jù)水果的類型查詢出一條數(shù)據(jù)顯示出每種類型的銷售數(shù)量。
?
123456789
create table demo(id int,name varchar(20),nums int);? ---- 創(chuàng)建表insert into demo values(1, '蘋果', 1000);insert into demo values(2, '蘋果', 2000);insert into demo values(3, '蘋果', 4000);insert into demo values(4, '橘子', 5000);insert into demo values(5, '橘子', 3000);insert into demo values(6, '葡萄', 3500);insert into demo values(7, '芒果', 4200);insert into demo values(8, '芒果', 5500);
分組查詢 (當(dāng)然這是不符合查詢一條數(shù)據(jù)的要求的)
?
1
select name, sum(nums) nums from demo group by name
行轉(zhuǎn)列查詢
?
1
select * from (select name, nums from demo) pivot (sum(nums) for name in ('蘋果' 蘋果, '橘子', '葡萄', '芒果'));
注意: pivot(聚合函數(shù) for 列名 in(類型)) ,其中 in(‘’) 中可以指定別名,in中還可以指定子查詢,比如 select distinct code from customers
當(dāng)然也可以不使用pivot函數(shù),等同于下列語句,只是代碼比較長,容易理解
?
12
select * from (select sum(nums) 蘋果 from demo where name='蘋果'),(select sum(nums) 橘子 from demo where name='橘子'),???????(select sum(nums) 葡萄 from demo where name='葡萄'),(select sum(nums) 芒果 from demo where name='芒果');
unpivot 行轉(zhuǎn)列
顧名思義就是將多列轉(zhuǎn)換成1列中去
案例:現(xiàn)在有一個水果表,記錄了4個季度的銷售數(shù)量,現(xiàn)在要將每種水果的每個季度的銷售情況用多行數(shù)據(jù)展示。
創(chuàng)建表和數(shù)據(jù)
?
1234567
create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int);?insert into Fruit values(1,'蘋果',1000,2000,3300,5000);insert into Fruit values(2,'橘子',3000,3000,3200,1500);insert into Fruit values(3,'香蕉',2500,3500,2200,2500);insert into Fruit values(4,'葡萄',1500,2500,1200,3500);select * from Fruit
列轉(zhuǎn)行查詢
?
1
select id , name, jidu, xiaoshou from Fruit unpivot (xiaoshou for jidu in (q1, q2, q3, q4) )
注意: unpivot沒有聚合函數(shù),xiaoshou、jidu字段也是臨時的變量
1、首先,需要向表中添加一列或多列。
2、其次,需要指定要添加新列的表的名稱。
3、最后,指定列名,數(shù)據(jù)類型及其約束即可。
你這個應(yīng)該是一張通用的表吧,就是說下面還有可能出現(xiàn),諸如id=10002或者10003等。
如果這樣的話,就用row_number()over(partition
by
id),進(jìn)行排序,然后把排序后的再進(jìn)行轉(zhuǎn)換。
比如上面這個就是
select
row_number()over(partition
by
id)
id_id,id,countnum
from
table
這樣會出來結(jié)果,如下
id_id
id
countnum
1
10001
30
2
10001
40
3
10001
50
1
10002
20
2
10002
50
3
10002
30
上面的結(jié)果沒有排序,也可以按照countnum進(jìn)行排序,就是在partition
by
id的后面加一個orderby,看你用不用了。
然后再對這個結(jié)果進(jìn)行行列轉(zhuǎn)換,用case
when就行,我假設(shè)上張表取別名為a
那么
select
id,(case
when
id_id=1
then
countnum
end)
column1,,(case
when
id_id=2
then
countnum
end)
column2,(case
when
id_id=3
then
countnum
end)
column3,(case
when
id_id=4
then
countnum
end)
column3,........from
a
不過這種寫法有一個問題,就是必須寫一個最長的,不然你就有數(shù)據(jù)不能顯示出來。
如果只有一個10001,那么可以利用rownum直接編組。