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函式以及...