回 帖 发 新 帖 刷新版面

主题:急,求两个sql语句,热心人帮我一下

产品信息表product               入库单表import
(产品编号)  名称               (入库单编号)  产品编号   数量   日期
  101        aa                 0801001        101       8     08-01
  102        bb                 0801002        102       2     08-01
  ....                          0802001        101       3     08-02
                                ..........
想查询得到这样的结果(求库存还有多少)
产品编号     名称        数量
101           aa         8+3 
102           bb          2


收件单表receive         取件单表getbill                   员工信息表employees
(收件单id)   员工id     (取件单id)  收件单id 业务评价     (员工id)  姓名  
0801001       001        0802001    0801001    满意        001      jack
0801002       002        0802002    0801002    一般        002      jhon
0801003       001        0802003    0801003    不满意      .....     
0801004       002        0802004    0801004    满意
.....                     ......
想对员工的服务情况进行统计,得到这样一张统计表
员工id     姓名     满意     一般      不满意
001        jack     1         0          1
002        jhon     1         1          0

回复列表 (共15个回复)

沙发

1.
select 产品编号,名称,b.数量 from product,(select 产品编号,sum(数量) as 数量 from import group by 产品编号) as b where product.产品编号=b.产品编号

2.
你的第二个查询,我想单一的sql语句应该是解决不了的.

板凳

1
declare @product table(产品编号 char(10),名称 char(10))
insert @product select 101,'aa'
union all select 102,'bb'

declare @inport table(入库单编号 char(10),产品编号 char(10),数量 int)
insert  @inport select '0801001',101,8 
union all select  '0801002',102,2
union all select '0802001',101,3

select 产品编号,名称,数量=(select sum(数量) from @inport where 产品编号=a.产品编号) from @product a

3 楼

2
declare @receive table(收件单id char(10),员工id char(10))
insert @receive select '0801001','001'
union all select '0801002','002'
union all select '0801003','001'
union all select '0801004' ,'002'

declare @getbill table(取件单id char(10),收件单id char(10),业务评价 char(10))
insert @getbill select '0802001','0801001','满意'
union all select '0802002','0801002','一般'
union all select '0802003','0801003','不满意'
union all select '0802004','0801004','满意'

declare @employees table(员工id char(10),姓名 char(10))
insert  @employees select  '001','jack'
union all select '002','jhon'

select 员工id,姓名,满意=(select count(*) from @getbill b where 收件单id
 in(select 收件单id from @receive c where 员工id=a.员工id and 业务评价='满意')),
一般=(select count(*) from @getbill b where 收件单id
 in(select 收件单id from @receive c where 员工id=a.员工id and 业务评价='一般')),
不满意=(select count(*) from @getbill b where 收件单id
 in(select 收件单id from @receive c where 员工id=a.员工id and 业务评价='不满意'))
 from @employees a 

4 楼

第一个2楼已经解决。
解决第二个。
select 员工id,姓名
,sum(case getbill.业务评价 when  满意 else 0 end) as 满意
,sum(case getbill.业务评价 when  一般 else 0 end) as 一般 
,sum(case getbill.业务评价 when  不满意 else 0 end) as 不满意
from receive,getbill,employees
where employees.员工id=receive.员工id
 and receive.收件单id=employees.收件单id
group by 员工id,姓名

5 楼

不好意思居然泄漏了。。。。。。
select employees.员工id,姓名
,sum(case getbill.业务评价 when 满意 then getbill.业务评价
 else 0 end) as 满意
,sum(case getbill.业务评价 when  一般 then getbill.业务评价
 else 0 end) as 一般 
,sum(case getbill.业务评价 when  不满意 then getbill.业务评价
else 0 end) as 不满意
from receive,getbill,employees
where employees.员工id=receive.员工id
 and receive.收件单id=employees.收件单id
group by employees.员工id,姓名

你再试试!

6 楼

顶楼上的,sql语句写的很棒啊,向你学习

7 楼

第二句我调式了一下,还是不行啊,不知道还有没有其他方法啊?

8 楼

不是已告诉你吗,怎么不行,你用的是什么数据库

9 楼

我用的是access数据库,access可以写存储过程的吗?
我想最好是直接用语句写出来

10 楼

哦,改成这样看行不行
select 员工id,姓名,(select count(*) from @getbill b where 收件单id
 in(select 收件单id from @receive c where 员工id=a.员工id and 业务评价='满意')) as 满意,
(select count(*) from @getbill b where 收件单id
 in(select 收件单id from @receive c where 员工id=a.员工id and 业务评价='一般')) as 一般,
(select count(*) from @getbill b where 收件单id
 in(select 收件单id from @receive c where 员工id=a.员工id and 业务评价='不满意')) as 不满意
 from @employees a 

我来回复

您尚未登录,请登录后再回复。点此登录或注册