今天看到个美女

 

我可以都把以前学了下的行转列忘记了

但是今天看到一个美女在问一个数据库的问题

就是行转列的

没办法,为了美女我又学习了下

还有动态的,有点强

留个例子


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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值