MySQL列轉行巧錄資料
開發同學讓我幫忙看看一個資料怎麼錄合適。
原始的資料如下,要錄入到資料庫裡。
先取消Excel的單元格合併.
刪除第一行和第二行的資料,這些都是標題.
然後匯出CSV檔案,
使用文字檔案編輯器開啟CSV,替換 - 為 ,
然後 德塔貝斯 建個表。
再將CSV資料匯入.
類似於紅框的部分,都是連續的節目,需要合併時間段。
下表是模擬開發同事最終錄入資料的表。
錄入的SQL
檢視結果
這個方法看著步驟比較多,其實還是很省事兒的.
主要的工作就是把Excel匯入資料庫,匯入之後的合併,使用同一個SQL改改就好。沒啥工作量。
否則使用JAVA解析,還需要自己合併時間段.也不是一個輕鬆的事情.
該同學需要錄入 這種Excel 大致20多個..我覺得我這個方法核心步驟可以複用,應該還是很有效率的。
原始的資料如下,要錄入到資料庫裡。
先取消Excel的單元格合併.
刪除第一行和第二行的資料,這些都是標題.
然後匯出CSV檔案,
使用文字檔案編輯器開啟CSV,替換 - 為 ,
然後 德塔貝斯 建個表。
再將CSV資料匯入.
-
create table t(
-
id int primary key auto_increment,
-
starttime time,
-
endtime time,
-
d1 varchar(20),
-
d2 varchar(20),
-
d3 varchar(20),
-
d4 varchar(20),
-
d5 varchar(20),
-
d6 varchar(20),
-
d7 varchar(20)
- );
類似於紅框的部分,都是連續的節目,需要合併時間段。
下表是模擬開發同事最終錄入資料的表。
-
create table target(
-
id int primary key auto_increment,
-
channel varchar(32) comment '電臺名稱',
-
d int comment '1-7 表示星期一或者星期二...',
-
starttime time comment '節目開始時間',
-
endtime time comment '節目結束時間',
-
program varchar(32) comment '節目名稱'
- );
錄入的SQL
- insert into target(channel,d,program,starttime,endtime)
- select '中國之聲',1,d1,min(starttime),max(endtime) from (
- SELECT @gid := @cgid, @cgid := t.d1, if(@gid = @cgid, @rank,@rank := @rank + 1) AS rank, t.* from
- (select id,starttime,endtime,d1 from t order by id) t ,(SELECT @gid := 1, @cgid := 1, @rank := 0) t2
- ) t4 group by d1,rank
- union all
- select '中國之聲',2,d2,min(starttime),max(endtime) from (
- SELECT @gid := @cgid, @cgid := t.d2, if(@gid = @cgid, @rank,@rank := @rank + 1) AS rank, t.* from
- (select id,starttime,endtime,d2 from t order by id) t ,(SELECT @gid := 1, @cgid := 1, @rank := 0) t2
- ) t4 group by d2,rank
- union all
- select '中國之聲',3,d3,min(starttime),max(endtime) from (
- SELECT @gid := @cgid, @cgid := t.d3, if(@gid = @cgid, @rank,@rank := @rank + 1) AS rank, t.* from
- (select id,starttime,endtime,d3 from t order by id) t ,(SELECT @gid := 1, @cgid := 1, @rank := 0) t2
- ) t4 group by d3,rank
- union all
- select '中國之聲',4,d4,min(starttime),max(endtime) from (
- SELECT @gid := @cgid, @cgid := t.d4, if(@gid = @cgid, @rank,@rank := @rank + 1) AS rank, t.* from
- (select id,starttime,endtime,d4 from t order by id) t ,(SELECT @gid := 1, @cgid := 1, @rank := 0) t2
- ) t4 group by d4,rank
- union all
- select '中國之聲',5,d5,min(starttime),max(endtime) from (
- SELECT @gid := @cgid, @cgid := t.d5, if(@gid = @cgid, @rank,@rank := @rank + 1) AS rank, t.* from
- (select id,starttime,endtime,d5 from t order by id) t ,(SELECT @gid := 1, @cgid := 1, @rank := 0) t2
- ) t4 group by d5,rank
- union all
- select '中國之聲',6,d6,min(starttime),max(endtime) from (
- SELECT @gid := @cgid, @cgid := t.d6, if(@gid = @cgid, @rank,@rank := @rank + 1) AS rank, t.* from
- (select id,starttime,endtime,d6 from t order by id) t ,(SELECT @gid := 1, @cgid := 1, @rank := 0) t2
- ) t4 group by d6,rank
- union all
- select '中國之聲',7,d7,min(starttime),max(endtime) from (
- SELECT @gid := @cgid, @cgid := t.d7, if(@gid = @cgid, @rank,@rank := @rank + 1) AS rank, t.* from
- (select id,starttime,endtime,d7 from t order by id) t ,(SELECT @gid := 1, @cgid := 1, @rank := 0) t2
-
) t4 group by d7,rank;
檢視結果
這個方法看著步驟比較多,其實還是很省事兒的.
主要的工作就是把Excel匯入資料庫,匯入之後的合併,使用同一個SQL改改就好。沒啥工作量。
否則使用JAVA解析,還需要自己合併時間段.也不是一個輕鬆的事情.
該同學需要錄入 這種Excel 大致20多個..我覺得我這個方法核心步驟可以複用,應該還是很有效率的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2128626/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Mysql - 行轉列、列轉行MySql
- mysql列轉行MySql
- mysql 行轉列MySql
- mysql資料目錄結構(轉)MySql
- mysql基礎 行轉列MySql
- /*列轉行查詢表資料*/
- 【MySQL】MySQL如何合併多行資料,行轉列,group_concat 多行合併MySql
- MySQL-資料記錄大小寫轉換MySql
- 用XML/XSLT將行資料轉換為列資料 (轉)XML
- 【MySQL 資料庫】MySQL目錄MySql資料庫
- 資料庫知識點(2)——行轉列資料庫
- MySQL 行轉列詳情鍾萼MySql
- SQL 行轉列,列轉行SQL
- [MySQL] 行列變化各種方法實現總結(行變列報表統計、列變行資料記錄統計等)MySql
- Excel 如何批次將矩陣(多行多列)資料轉為單行或單列資料Excel矩陣
- MySQL資料庫行去重複和列去重複MySql資料庫
- mysql 修改資料庫的列MySql資料庫
- asp中利用陣列實現資料庫記錄的批次錄入方法 (轉)陣列資料庫
- mysql修改資料檔案目錄MySql
- xml資料轉陣列XML陣列
- MySQL 更改資料庫資料儲存目錄MySql資料庫
- Excel實現動態行轉列(資料透視表)Excel
- MySQL原理 - InnoDB引擎 - 行記錄儲存 - Off-page 列MySql
- 巧學妙用Windows組合鍵進行快速操作(轉)Windows
- wdcp修改mysql的資料目錄MySql
- 更改MySQL資料檔案目錄位置MySql
- 瞭解MySQl資料庫目錄MySql資料庫
- hive經典案列--top N(行轉列\列轉行)Hive
- Excel巧錄許可權矩陣Excel矩陣
- rhel5 mysql 資料庫_列_資料型別MySql資料庫資料型別
- 通過 SQL 實現行轉列(列的資料條目、資料分佈是不規則的)SQL
- oracle 11g的行轉列、列轉行Oracle
- sql的行轉列(PIVOT)與列轉行(UNPIVOT)SQL
- 玩轉Mysql命令列MySql命令列
- Windows 2000/XP 下巧拒強行關機(轉)Windows
- [轉]Mysql資料庫相關資料索引MySql資料庫索引
- Ubuntu 上更改 MySQL 資料庫資料儲存目錄UbuntuMySql資料庫
- SQL列轉行SQL