SQL中行轉列 列轉行

2021-09-28 08:05:48 字數 3953 閱讀 2825

sql行轉列、列轉行

這個主題還是比較常見的,行轉列主要適用於對資料作聚合統計,如統計某類目的商品在某個時間區間的銷售情況。

整理測試資料

create

table wyc_test(

id int(32

)not

null

auto_increment

, name varchar(80

)default

null

,date

date

default

null

, scount int(32

),primary

key(id));

insert

into

`wyc_test`

(`id`

,`name`,`

date`,

`scount`

)values(1

,'**'

,'2013-09-01'

,10000);

insert

into

`wyc_test`

(`id`

,`name`,`

date`,

`scount`

)values(2

,,'2013-09-01'

,20000);

insert

into

`wyc_test`

(`id`

,`name`,`

date`,

`scount`

)values(3

,'**'

,'2013-09-02'

,30000);

insert

into

`wyc_test`

(`id`

,`name`,`

date`,

`scount`

)values(4

,,'2013-09-02'

,35000);

insert

into

`wyc_test`

(`id`

,`name`,`

date`,

`scount`

)values(5

,'**'

,'2013-09-03'

,31000);

insert

into

`wyc_test`

(`id`

,`name`,`

date`,

`scount`

)values(6

,,'2013-09-03'

,36000);

insert

into

`wyc_test`

(`id`

,`name`,`

date`,

`scount`

)values(7

,'**'

,'2013-09-04'

,35000);

insert

into

`wyc_test`

(`id`

,`name`,`

date`,

`scount`

)values(8

,,'2013-09-04'

,38000);

insert

into

`wyc_test`

(`id`

,`name`,`

date`,

`scount`

)values(9

,'**'

,'2013-09-01'

,80000);

insert

into

`wyc_test`

(`id`

,`name`,`

date`,

`scount`

)values(10

,,'2013-09-01'

,70000

);

主要思路是分組後使用case進行條件判斷處理

#行轉列

select

a.date

,sum

(case a.name

when

'**'

then a.scount

else

0end

)'sum_**'

,max

(case a.name

when

'**'

then a.scount

else

0end

)'max_**'

,sum

(case a.name

when

then a.scount

else

0end),

max(

case a.name

when

'**'

then a.scount

else

0end

)from

wyc_test a

group

bydate

;

主要思路也是分組後使用case

#列轉行

select

a.date

, concat(

'**:'

, cast(

sum(

case a.name

when

'**'

then a.scount

else

0end)as

char),

, cast(

sum(

case a.name

when

then a.scount

else

0end)as

char))

as'str'

from

wyc_test a

group

by a.

date

;#列轉行

#1.使用mysql提供的函式分組

select a.

date

,group_concat(a.name,

'總量:'

, a.scount)

from wyc_test a group

by a.

date

,a.name;

#2.使用mysql提供的函式分組

select a.

date

,a.name, group_concat(a.name,

'總量:'

, a.scount)

from wyc_test a group

by a.

date

,a.name;

#3.普通group結合字串拼接

select

a.date

, concat(

'**總量:'

, cast(

sum(

case a.name

when

'**'

then a.scount

else

0end)as

char))

as'**'

, concat(

, cast(

sum(

case a.name

when

then a.scount

else

0end)as

char))

asfrom

wyc_test a

group

by a.

date

;

SQL Server 中行轉列 列轉行

行轉列 create database test on primary name test.mdf filename d project test.mdf size 10mb,filegrowth 15 log on name test.ndf filename d project test.ldf...

MySQL中行轉列與列轉行

mysql中行轉列與列轉行 行轉列,即為將mysql中原本同一列 字段 下的內容轉換為同一行的多個字段。如上圖一張成績表,進行如下轉換 1 行轉列轉換後,轉換後,變為如下顯示 明顯可以看出,此時將userid分為了一組,每組都有語文 數學 英語 政治這幾門課的成績。方式一 用if語句轉換 selec...

hive中行轉列 列轉行的實現

行轉列實現 表資訊 場景一 使用concat ws和collect set函式 說明 collect set函式可以返回乙個array型別。concat ws函式可以拼接陣列,如下 場景二 有時候如果需要對指標字段求和,則上述sql改寫成如下 場景三 使用str to map和explode函式以及...