我可以都把以前学了下的行转列忘记了
但是今天看到一个美女在问一个数据库的问题
就是行转列的
没办法,为了美女我又学习了下
还有动态的,有点强
留个例子
IF object_id('TB') IS NOT NULL
DROP TABLE TB
CREATE TABLE TB(部门 VARCHAR(50),姓名 VARCHAR(20),年龄 INT)
--测试数据
INSERT INTO TB
SELECT '部门A','张三',21 UNION ALL
SELECT '部门A','李四',20 UNION ALL
SELECT '部门B','小王',21 UNION ALL
SELECT '部门B','王五',25 UNION ALL
SELECT '部门B','小赵',20 UNION ALL
SELECT '部门C','小李',21 UNION ALL
SELECT '部门C','小刚',29
go
--这里是静态的,对于数目少的时候可用
--SELECT 部门,MAX(CASE 年龄 WHEN 20 THEN 数量 ELSE 0 END) AS 二十,MAX(CASE 年龄 WHEN 21 THEN 数量 ELSE 0 END) AS 二十一 FROM (SELECT 部门 AS 部门,年龄 AS 年龄,COUNT(1) AS 数量 FROM TB GROUP BY 部门,年龄)AS T GROUP BY T.部门
---以下是动态的
DECLARE @sql varchar(3000)
SET @sql='SELECT 部门 '
SELECT @sql=@sql+',MAX(CASE 年龄 WHEN '+cast(a.年龄 as varchar)+' THEN 数量 ELSE 0 END) AS ['+cast(a.年龄 as varchar)+']' FROM (SELECT DISTINCT 年龄 FROM TB) as a
SET @sql=@sql+' FROM(SELECT 部门 AS 部门,年龄 AS 年龄,COUNT(1) AS 数量 FROM TB GROUP BY 部门,年龄)AS T GROUP BY T.部门'
EXEC(@sql)
DROP TABLE TB