首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

postgre 依据字段不同值统计相应值得个数(描述不清,看正文吧)

2013-08-24 
postgre 根据字段不同值统计相应值得个数(描述不清,看正文吧)意思是:一个表一个字段user,一个字段task_typ

postgre 根据字段不同值统计相应值得个数(描述不清,看正文吧)
意思是:一个表一个字段user,一个字段task_type 它的值为a的为5条记录,b的为6条记录,c的为7条记录。。。若干个人,会有不同任务类型任务a,b,c....怎么统计不同的人的不同任务类型的个数。。

最后得出的结果形式是:user     a    b     c   ,,,,
          
                      user_1   5    4     3
                      user_2   3    22    22

[解决办法]

CREATE TABLE #temp([user] VARCHAR(10), task_type VARCHAR(10))
INSERT #temp
SELECT 'user_1', 'a' UNION ALL
SELECT 'user_1', 'b' UNION ALL
SELECT 'user_2', 'c'

DECLARE @sql NVARCHAR(MAX), @Tasklist NVARCHAR(MAX)
SELECT @Tasklist = STUFF((SELECT DISTINCT ','+QUOTENAME(task_type) FROM #temp FOR XML PATH('')),1,1,'')


SET @sql = N'
select * 
from (SELECT [user], task_type, cnt=COUNT(1) FROM #temp GROUP BY [user], task_type) a
pivot
(max(cnt) for task_type in('+ @Tasklist +')) b
'
PRINT @sql

EXEC(@sql)
/*
userabc
user_111NULL
user_2NULLNULL1
*/


[解决办法]
--静态最简单写法
select [user],SUM(case when task_type='a' then 1 else 0) as a,
SUM(case when task_type='b' then 1 else 0) as b,
SUM(case when task_type='c' then 1 else 0) as c,SUM(1) as 总数
from tb
group by [user]

热点排行