1. 程式人生 > >SQL 統計 欄位 豎向轉橫向 (行轉列)顯示

SQL 統計 欄位 豎向轉橫向 (行轉列)顯示

在做一些SQL統計時,為了更直觀看到結果,並進行比較,需要把豎向表的部分統計欄位轉成橫向顯示。

原資料格式:

wbname        newstime

------------------------------

瀟湘晨報        直播報道
佛山日報後天
揚子晚報昨天
揚子晚報昨天
足球報    直播報道
足球報    直播報道
中山日報昨天

要統計成橫向結構

wbname        昨天         直播報道       後天 
------------------------------------------------------

瀟湘晨報         0                    1                 0
佛山日報 0                    0                 1
揚子晚報 2                    0                 0
足球報     0                    2                 0
中山日報 1                    0                 0

資料庫表的結構

Field     Type       
--------  -----------
id        int(11)    
wbname    varchar(50)
newstime  varchar(50)


測試資料(MySQL)

insert  into `wb`(`id`,`wbname`,`newstime`) values 
(1,'瀟湘晨報','直播報道'),
(2,'佛山日報','後天'),
(3,'揚子晚報','昨天'),
(4,'揚子晚報','昨天'),
(5,'足球報','直播報道'),
(6,'足球報','直播報道'),
(7,'中山日報','昨天'),
(8,'中山日報','當天'),
(9,'中山日報','直播報道'),
(10,'錢江晚報','直播報道'),
(11,'南方日報','時間不詳'),
(12,'廣州日報','直播報道'),
(13,'中國經營報','時間不詳'),
(14,'中國經營報','時間不詳'),
(15,'中國經營報','上週'),
(16,'煙臺日報傳媒集團','時間不詳'),
(17,'煙臺日報傳媒集團','其他'),
(18,'煙臺日報傳媒集團','上週'),
(19,'揚子晚報','時間不詳'),
(20,'揚子晚報','上週'),
(21,'揚子晚報','時間不詳'),
(22,'揚子晚報','時間不詳'),
(23,'揚子晚報','當天'),
(24,'揚子晚報','時間不詳'),
(25,'瀟湘晨報','時間不詳'),
(26,'足球報','直播報道'),
(27,'足球報','直播報道'),
(28,'瀟湘晨報','其他'),
(29,'瀟湘晨報','其他'),
(30,'足球報','直播報道'),
(31,'足球報','直播報道'),
(32,'足球報','直播報道'),
(33,'足球報','直播報道'),
(34,'足球報','直播報道'),
(35,'足球報','直播報道'),
(36,'瀟湘晨報','當天'),
(37,'足球報','直播報道'),
(38,'瀟湘晨報','直播報道'),
(39,'瀟湘晨報','直播報道'),
(40,'瀟湘晨報','直播報道'),
(41,'瀟湘晨報','直播報道');


主角:SQL語句

select wbname
	,sum(case when newstime='上週' then total else 0 end) as '上週'
	,sum(case when newstime='昨天' then total else 0 end) as '昨天'
	,sum(case when newstime='當天' then total else 0 end) as '當天'
	,sum(case when newstime='直播報道' then total else 0 end) as '直播報道'
	,sum(case when newstime='時間不詳' then total else 0 end) as '時間不詳'
	,sum(case when newstime='其他' then total else 0 end) as '其他'
from (
   select wbname,newstime,count(*) as total from wb group by wbname,newstime
 as temp group by wbname;