表一:cjsc 字段:grname(姓名) ,wlbm(物品),dqgx(物品属性) ,sl(数量) ,czlx(类型)grname(姓名) ,wlbm(物品),dqgx(物品属性) ,sl(数量) ,czlx(类型)
我 铅笔 x 1 买入
我 铅笔 x 3 买入
我 铅笔 y 2 损坏
我 钢笔 x 4 买入
他 铅笔 y 1 损坏
他 钢笔 y 2 买入
要求实现:
姓名 物品 物品属性 买入数量 损坏数量
我 钢笔 x 4 0我 铅笔 x 4 0
我 铅笔 y 0 2
他 钢笔 y 1 2
我 铅笔 x 1 买入
我 铅笔 x 3 买入
我 铅笔 y 2 损坏
我 钢笔 x 4 买入
他 铅笔 y 1 损坏
他 钢笔 y 2 买入
要求实现:
姓名 物品 物品属性 买入数量 损坏数量
我 钢笔 x 4 0我 铅笔 x 4 0
我 铅笔 y 0 2
他 钢笔 y 1 2
sum(case when czlx = '买入' else sl else 0 end) '买入数量',
sum(case when czlx = '损坏' else sl else 0 end) '损坏数量'
from 表一
group by grname,wlbm,dqgx
--下为类型不固定的情况.
declare @sql varchar(8000)
set @sql = 'select grname,wlbm,dqgx'
select @sql = @sql + ' , sum(case czlx when ''' + czlx + ''' then sl else 0 end) [' + czlx + '数量]'
from (select distinct czlx from 表一) as a
set @sql = @sql + ' from 表一 group by grname,wlbm,dqgx'
exec(@sql)
insert into tb values('我', '铅笔', 'x', 1, '买入')
insert into tb values('我', '铅笔', 'x', 3, '买入')
insert into tb values('我', '铅笔', 'y', 2, '损坏')
insert into tb values('我', '钢笔', 'x', 4, '买入')
insert into tb values('他', '铅笔', 'y', 1, '损坏')
insert into tb values('他', '钢笔', 'y', 2, '买入')
go
--静态SQL
select grname,wlbm,dqgx,
sum(case when czlx = '买入' then sl else 0 end) '买入数量',
sum(case when czlx = '损坏' then sl else 0 end) '损坏数量'
from tb
group by grname,wlbm,dqgx
--动态SQL
declare @sql varchar(8000)
set @sql = 'select grname,wlbm,dqgx'
select @sql = @sql + ' , sum(case czlx when ''' + czlx + ''' then sl else 0 end) [' + czlx + '数量]'
from (select distinct czlx from tb) as a
set @sql = @sql + ' from tb group by grname,wlbm,dqgx'
exec(@sql)drop table tb/*
grname wlbm dqgx 买入数量 损坏数量
---------- ---------- ---------- ----------- -----------
他 钢笔 y 2 0
他 铅笔 y 0 1
我 钢笔 x 4 0
我 铅笔 x 4 0
我 铅笔 y 0 2(所影响的行数为 5 行)grname wlbm dqgx 买入数量 损坏数量
---------- ---------- ---------- ----------- -----------
他 钢笔 y 2 0
他 铅笔 y 0 1
我 钢笔 x 4 0
我 铅笔 x 4 0
我 铅笔 y 0 2
*/
>>>>>>>>>>>
你的答案不对哦