电饼铛不放油可以用吗:求 SQL 语句 或 制表方法

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 12:27:34
表a 字段:工厂名称,设备名称,设备数量
例如:北京建筑,1,2
北京建筑,2,1
北京建筑,3,4
大堂集团,1,3
大堂集团,2,5

表b 字段:设备编号,设备名称
例如: 1,卡车
2,吊车
3,推土机

现在求作一张表,字段:工厂名称,卡车,吊车,推土机
内容:北京建筑,2 ,1 ,4
大堂集团,3 ,5 ,0
SQL 怎么写 或者说 可行吗?

select 工厂名称,
sum(case 表a.设备名称 when 1 then 设备数量 else 0 end)卡车,
sum(case 表a.设备名称 when 2 then 设备数量 else 0 end)吊车,
sum(case 表a.设备名称 when 3 then 设备数量 else 0 end)推土机
from 表a,表b
group by 工厂名称

以上是只针对本问题的,下面给个通用行列转换例子

假设有张学生成绩表(CJ)如下
[姓名] [学科] [成绩]
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82
王五 数学 60

想变成
[姓名] [语文] [数学] [物理]
张三 80 90 85
李四 85 92 82
王五 null 60 null

declare @sql varchar(4000)
set @sql = 'select 姓名'
select @sql = @sql + ',sum(case 学科 when '''+学科+''' then 成绩 end) as '+学科
from (select distinct 学科 from CJ) as a
set @sql = @sql+' from cj group by 姓名'
exec(@sql)