求一单表查询语句
表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