mysql 列交換 mysql 行列互換

2021-10-25 14:43:20 字數 2068 閱讀 8580

做工程的人來說,技術通過服務業務來產生價值,所以在提高技術的基礎上,更多的是需要業務知識,更好得體現技術的價值。

【行轉列】

假設你有這樣乙個表,記錄了每個銷售部門,每一天的銷售金額表1,每日各部門銷售金額明細表

use analysis;

create table `tmp_department_sales` (

`id` int(11) not null auto_increment first,

`sale_day` varchar(32) null,

`department` varchar(32) null,

`sales_mount` int(11) null,

primary key (`id`)

) engine=innodb

default character set=utf8 collate=utf8_general_ci;

這只是三天,四個部門的情況,如果是三個月,10個部門,那就是900行資料,看起來非常不方便,一般都會有這樣的乙個需求,如下:表2,按部門彙總

那麼怎麼用mysql**實現呢,其實很簡單:

select sale_day,

sum(if(department='銷售一部',sales_mount,0)) as 'dep_01',

sum(if(department='銷售二部',sales_mount,0)) as 'dep_02',

sum(if(department='銷售三部',sales_mount,0)) as 'dep_03',

sum(if(department='銷售四部',sales_mount,0)) as 'dep_04'

from tmp_department_sales

group by sale_day;

這樣就是用了乙個sum(if())的組合,以上就是行轉列的過程。

【列轉行】

如果反過來,要從列轉為行,就是基於表2,轉換成表1。

先得到乙個表tmp_department_sale_rollup,可以實現表2的形式:

use analysis;

drop table if exists analysis.tmp_department_sale_rollup;

create table if not exists analysis.tmp_department_sale_rollup

select sale_day,

sum(if(department='銷售一部',sales_mount,0)) as 'dep_01',

sum(if(department='銷售二部',sales_mount,0)) as 'dep_02',

sum(if(department='銷售三部',sales_mount,0)) as 'dep_03',

sum(if(department='銷售四部',sales_mount,0)) as 'dep_04'

from tmp_department_sales

group by sale_day;

select * from tmp_department_sale_rollup;

然後用以下**進行列轉行,其實也很簡單:

select sale_day ,dep_01 as sales_mount,'銷售一部' as department

from tmp_department_sale_rollup

union all

select sale_day ,dep_02 as sales_mount,'銷售二部' as department

from tmp_department_sale_rollup

union all

select sale_day ,dep_03 as sales_mount,'銷售三部' as department

from tmp_department_sale_rollup

union all

select sale_day ,dep_04 as sales_mount,'銷售四部' as department

from tmp_department_sale_rollup;

mysql 列交換 資料庫行列互換

sql server case group 2 oracle decode group 假設用到的sql語句為 select 姓名 時代 金錢 from test dbo people 想要等到如下的結果 姓名 年輕 中年 老年 張三 1000 5000 800 李四 1200 6000 500 s...

mysql 行 列 MySQL行到列

任何人都可以幫助我如何使用源表上的行資料作為輸出頭檔案建立查詢輸出.請參閱下面的插圖.例如.行資料 colheader value header1 value 1 header2 value 2 header3 value 3 輸出 header1 header2 header3 value 1 v...

mysql行列轉換 mysql行列轉換

1.一維轉二維 上圖為成績表中資料,現希望將資料轉換為下圖。靜態 轉化為二維表後的列名及列數是確定不變的,本例中即course只有數學 語文 英語這三門課。select s name,max if course 數學 score,0 as 數學,max if course 語文 score,0 as...