请高手指点,下面的sql语句要怎么写

类别1],[类别2],[类别3],[类别4]这个是变化的

在做数据统计的时候,行转列,列转行是经常碰到的问题。case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强
SELECT * FROM [tablename] /*数据源*/
AS P
PIVOT
(
Count(类别/*行转列后 列的值*/) FOR
p.类别/*需要行转列的列*/ IN ([类别1],[类别2],[类别3],[类别4]/*列的值*/)
) AS T追问

[类别1],[类别2],[类别3],[类别4]这个需要写定吗,我的这个是活的,会变化的

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-02-26

用EXCEL处理,新建数据库查询,然后做数据透视表,很简单的。

单独用SQL实现这个也可以。就是用SQL语句写SQL语句的逻辑来做,代码如下。


DECLARE @sql NVARCHAR(2000);

SELECT @sql='SELECT  姓名,  '  

SELECT @sql=@sql+' SUM(CASE WHEN 类别='''+REPLACE(类别,' ','')+''' THEN 1 '+'ELSE 0 END ) AS ' +''''+ REPLACE(类别,' ','') +''',' 
FROM 表名称 WHERE 类别 is not NULL GROUP BY 类别
SELECT @sql=LEFT(@sql,LEN(@sql)-1) 
SELECT @sql=@sql+' FROM 表名称 GROUP BY 姓名'

EXEC(@sql)

第2个回答  2019-02-25

动态行列转换


动态行列转换相关信息

你可以按照上面的思路处理一下就可以了,

如有疑问,及时沟通!

相似回答