如何将一行变成列,求sql语句!!

greytree 2004-11-11 06:09:44
比如有这样的一个表car

carpai cartype
冀A00001 大型车
冀A00002 大型车
冀A00003 小型车
冀A00004 小型车
冀A00001 微型车
冀B00001 大型车
冀B00001 小型车


想根据carpai的前两个字分组,然后统计出每种车型的数量。

查询之后的结果可能是这样的:
carpai 大型车 小型车 微型车
冀A 2 2 1
冀B 1 1 0

如果cartype多了一种类型,比如“巨型车”
可能就会是这样:
carpai 大型车 小型车 微型车 巨型车
冀A 2 2 1 0
冀B 1 1 0 0

这样的sql语句如何写?请各位高手指点
...全文
363 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
greytree 2004-11-15
  • 打赏
  • 举报
回复
这几天没顾上上网,小李铅笔刀说得最接近,
感谢大家的支持!!!
散分!!!
davorsuker39 2004-11-12
  • 打赏
  • 举报
回复
sensorcsdn(sensor) 强
lsxaa 2004-11-12
  • 打赏
  • 举报
回复
不用临时表
select left(carpai,2) as name,
sum(case cartype when '大型车' then 1 else 0 end) as 大型车,
sum(case cartype when '小型车' then 1 else 0 end) as 小型车,
--剩下的自写在这里
from 表
group by left(carpai,2)
sensorcsdn 2004-11-12
  • 打赏
  • 举报
回复
--测试
create table car(carpai varchar(20),cartype varchar(20))
insert into car select '冀A00001','大型车'
union all select '冀A00002','大型车'
union all select '冀A00003','小型车'
union all select '冀A00004','小型车'
union all select '冀A00001','微型车'
union all select '冀B00001','大型车'
go

declare @sql varchar(8000)
set @sql = 'select substring(carpai,1,2) as carpai,'
select @sql = @sql +' sum(case cartype when '''+ cartype +''' then 1 else 0 end) ['+ cartype +'],' from (select distinct cartype from car) tmp
set @sql = substring(@sql, 1, len(@sql)-1) +' from car group by substring(carpai,1,2)'
select @sql
exec(@sql)

drop table car
greytree 2004-11-11
  • 打赏
  • 举报
回复
不好意思,我忘了说了,不用临时表。能做到吗?
greytree 2004-11-11
  • 打赏
  • 举报
回复
非常感谢!!!
醉生梦死5684 2004-11-11
  • 打赏
  • 举报
回复
关注
victorycyz 2004-11-11
  • 打赏
  • 举报
回复
http://search.csdn.net/Expert/topic/2440/2440306.xml?temp=.1670343

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧