求一单表查询语句
表1
部门 名称 数量 出入类型
办公室 铅笔 10 0
办公室 铅笔 5 1
财务部 A4纸 2 0
办公室 圆珠笔 5 0
财务部 A4纸 2 0
办公室 铅笔 50 0
客服部 圆珠笔 8 0
经理办 A4纸 2 0
办公室 铅笔 50 1
财务部 A4纸 2 3
.....
求分部门每种材料领用汇总,出入类型为0的数量减去出入为1的数量
select 部门,名称,(sum(数量) with (出入类型=0) - sum(数量) with(出入类型=1))
from 表1
where 出入类型 in(0,1)
group by 部门,名称
这样语句不通啊~~
[解决办法]
create table tb(部门 varchar(10),名称 varchar(10),数量 int,出入类型 int)
insert into tb values( '办公室 ', '铅笔 ',10, 0)
insert into tb values( '办公室 ', '铅笔 ',5,1)
insert into tb values( '财务部 ', 'A4纸 ',2, 0)
insert into tb values( '办公室 ', '圆珠笔 ',5, 0)
insert into tb values( '财务部 ', 'A4纸 ',2, 0)
insert into tb values( '办公室 ', '铅笔 ',50, 0)
insert into tb values( '客服部 ', '圆珠笔 ',8 , 0)
insert into tb values( '经理办 ', 'A4纸 ',2, 0)
insert into tb values( '办公室 ', '铅笔 ',50, 1)
go
select isnull(m.部门,n.部门) 部门 , isnull(m.名称,n.名称) 名称 , isnull(m.数量,0) - isnull(n.数量,0) 数量 from
(select 部门,名称,sum(数量) 数量 from tb where 出入类型 = 0 group by 部门,名称) m
full join
(select 部门,名称,sum(数量) 数量 from tb where 出入类型 = 1 group by 部门,名称) n
on m.部门 = n.部门 and m.名称 = n.名称
drop table tb
/*
部门 名称 数量
---------- ---------- -----------
办公室 铅笔 5
办公室 圆珠笔 5
财务部 A4纸 4
经理办 A4纸 2
客服部 圆珠笔 8
(所影响的行数为 5 行)
*/
[解决办法]
借上一用
create table tb(部 varchar(10),名 varchar(10),量 int,出入型 int)
insert into tb values( '公室 ', ' ',10, 0)
insert into tb values( '公室 ', ' ',5,1)
insert into tb values( '部 ', 'A4 ',2, 0)
insert into tb values( '公室 ', '珠 ',5, 0)
insert into tb values( '部 ', 'A4 ',2, 0)
insert into tb values( '公室 ', ' ',50, 0)
insert into tb values( '客服部 ', '珠 ',8 , 0)
insert into tb values( '理 ', 'A4 ',2, 0)
insert into tb values( '公室 ', ' ',50, 1)
select a.部 ,a.名,a.qty-isnull(b.qty,0) as qty from
(
select 部 ,名 ,sum(量)as qty from tb where 出入型=0 group by 部 ,名
)a
left join
(
select 部 ,名 ,sum(量)as qty from tb where 出入型=1 group by 部 ,名
)b
on a.部=b.部 and a.名=b.名
部 名 qty
---------- ---------- -----------
客服部 珠 8
部 A4 4
理 A4 2
公室 珠 5
公室 5
(5 row(s) affected)
--drop table tb