日期:2014-05-17  浏览次数:20497 次

求 计数 与 实际数量 不一样
有一货品总览表 A

SQL code
货品名称 还剩数量
洗衣粉   10
面包     5

……

还有一个 每个物品一条记录的表 B

SQL code
物品编号 还在 货品名称
001      1    洗衣粉
002      1    面包
003      0    洗衣粉


"还在"这个列,值=1的话,说明该物品还,值为0表示物品已经不存在。

A表"货品名称"就是主键,想查所有物品还剩多少,是

select * from A

B表物品编号是主键,想查每样物品还有多少是

select count(物品编号) from B where 还在=1 group by 货品名称


现在,想让两种查询物品数量的结果显示在一起,因为可能由误操作导致两种记录结果不一样,想看一下。

select A.货品名称, B.货品名称,A.还剩数量 from A left join B on a.货品名称=b.货品名称

结果是

SQL code
货品名称 货品名称 还剩数量
洗衣粉   洗衣粉     10
面包     面包        5
蚊香     NULL        0

。。。

蚊香这个货品在B表里没有记录,所以查出来货品名称是NULL。还想加一列count(物品编号,但group by和"还在"=1
不知道怎么写,加在哪

------解决方案--------------------
你不是都写出来了吗

select A.货品名称, B.货品名称,A.还剩数量 from A left join B on a.货品名称=b.货品名称

作为一个表,和表A链接
------解决方案--------------------
SQL code
select A.货品名称, B.货品名称,A.还剩数量,t.还在数量 from A 
left join 
(
    select count(物品编号) 还在数量,货品名称 from B where 还在=1 group by 货品名称
) t
on A.货品名称=t.货品名称

------解决方案--------------------
SQL code
with  T as
(
    select count(物品编号) 还在数量,货品名称 from B where 还在=1 group by 货品名称
)
select A.货品名称, B.货品名称,A.还剩数量,t.还在数量 from A left join T on A.货品名称=t.货品名称