注册 登录
编程论坛 VB6论坛

数据库查询 select 如何解决重复的问题?

pipiqi1975 发布于 2014-11-05 21:05, 1088 次点击
我在做一个进销存的数据库,建了两个数据表,分别为入库和出库,入库包括 时间,商品名称,供货商,单价,数量;出库包括 时间,商品名称,单价,数量。
入库表(表1)如下:
只有本站会员才能查看附件,请 登录

出库表(表2)如下:
只有本站会员才能查看附件,请 登录

两张表按照入库和出库的 商品名称、供货商名称、单价 相等进行查询(select * from 入库,出库 where 入库.入库商品名称 = 出库.出库商品名称 and 入库.供货商名称=出库.供货商名称 and 入库.单价=出库.单价 )得出下表(表3)的结果:
只有本站会员才能查看附件,请 登录

很明显得出的结果中硒鼓的入库信息不正确,因为在入库表(表1)中供货商aaa的商品名称硒鼓仅入库2个,而在表3中却显示两条记录。
我用的是ADO+Mshflexgrid控件
1、如何查询才能正确的显示商品正确的库存数量??
2、或者我如何调整表的结构字段来解决这个问题??
3、如果不用Mshflexgrid控件,听说可以用picturebox或label控件实现,我该如何实现,说个简单的方法或是过程就行。
最终我要得到下面这样的结果
入库商品名称 入库数量 入库.单价 入库.供货商名称 出库数量 库存数量
    硒鼓        2        120          aaa         2         0
......
    电脑        20      3500       长城公司       10        10
select 入库商品名称,供货商名称,单价,sum(入库数量) as  入库数量 from 入库 group by 入库商品名称,供货商名称,单价
如下两图
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

哈哈,目前已经可以做出入库和出库的统计工作了,就差两个统计结果连接问题了,会的大虾可以抓紧时间回复哦。。。
ps:需要的是在vb下操作的方法哦。。。。。

[ 本帖最后由 pipiqi1975 于 2014-11-5 21:06 编辑 ]
11 回复
#2
pipiqi19752014-11-05 21:08
我用下面方法做过,但提示:不支持的连接表达式。
        Dim conn As New ADODB.Connection
        Dim rs As New ADODB.Recordset
        conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Administrator\Desktop\vb\数据库\进销存\进销存.mdb;" '连接数据库
        strSQL = "create view v1 as select 出库商品名称,供货商名称,单价,sum(出库数量) as 出库总数量 from 出库 group by 出库商品名称,供货商名称,单价"
        rs.Open strSQL, conn, 3, 3
        strSQL = "select 入库商品名称,入库数量,单价,入库.供货商名称,入库数量,出库数量,入库数量-isnull(出库总数量,0) as 库存数量 from 入库 left join v1 on 入库商品名称=v1.出库商品名称 and 入库.供货商名称=v1.供货商名称 and 入库.单价=v1.单价"
        rs.Open strSQL, conn, 3, 3
        Adodc1.Refresh
#3
xzlxzlxzl2014-11-06 07:55
从你的表述是想通过对出入库表的统计得到正确的库存数量。很显然这个统计就和日期、生产商、单价无关,仅和商品名称、商品数量有关,是一个group by商品名称的联合查询,sql语句如下:
select 入库.入库商品名称 as 商品名称,sum(入库.入库数量) as 入库总数,sum(出库.出库数量) as 出库总数,(sum(入库.入库数量)-sum(出库.出库数量)) as 库存数量 from 入库 left join 出库 on 入库.入库商品名称=出库.入库商品名称 group by 入库.入库商品名称

你的设计有问题,其实只需要建立一个库存表即可,出库对库存数量做减法,入库做加法,当然出入库的行为和时间可以再建立一个日志报表记录,相当于流水账。
#4
pipiqi19752014-11-06 12:07
回复 3 楼 xzlxzlxzl
与单价和供货商当然也有关系,因为两个供货商可能会供同一商品进行入库。
而单价当然也会有不同,不同的时间供的货的价格是有差别的。
#5
pipiqi19752014-11-06 12:09
回复 3 楼 xzlxzlxzl
如果只做一张库存表的话,无法达到统计入库数量和价格,这样无法与供货商进行对账了,还有没更好的调整数据表的方法呢?
#6
xzlxzlxzl2014-11-06 14:36
我觉得作为仓库管理,只需要分类同功能、同型号的产品数量,无需关注价格和哪天进的(有保质期的除外),因此就只需要一个库存表,进销存只需要对库存表数量进行操作即可(其实还有遗失、损坏、退货等操作)。但很多时候确实要登记每天操作的产品的细节如:生产厂家、进价等,这可以用另外一个专门记录流水账的日志报表来登记完成,这样你既可以非常清楚你当前的库存,你又可以方便查询你每天、每月、每年的具体操作细节和产品细节。
#7
pipiqi19752014-11-06 17:23
回复 6 楼 xzlxzlxzl
请问我如果非要用现在这表结构完成统计(因为你说的做一个流水记录表,我目前的知识还不知道如何下手),我下面的代码错在哪了?
select 入库.入库商品名称 as 商品名称,入库.供货商名称,入库.单价,sum(入库.入库数量) as 入库总数,sum(出库.出库数量) as 出库总数,(sum(入库.入库数量)-sum(出库.出库数量)) as 库存数量 from 入库 left join 出库 on 入库.入库商品名称=出库.出库商品名称 and 入库.供货商名称=出库.供货商名称 and 入库.单价=出库.单价 group by 入库商品名称,入库.供货商名称,入库.单价,出库商品名称,出库,供货商名称,出库.单价
#8
pipiqi19752014-11-06 17:26
回复 7 楼 pipiqi1975
这是我表的结构
只有本站会员才能查看附件,请 登录


[ 本帖最后由 pipiqi1975 于 2014-11-6 17:27 编辑 ]
#9
xzlxzlxzl2014-11-07 06:42
回复 7 楼 pipiqi1975
这~~~~~~~,有点无语!
关系数据库里的两个表只能有唯一对应关系,否则无法关联。sql语句里的and运算符一般只会出现在条件语句where之后。你这条语句应该有语法错误。
#10
chen35232014-11-09 20:27
我也懒建库 ,上传我曾经使用过的查询语句,有点相同,希望对你有帮助。
我认为查询分:库存查询,销售查询,入库查询,查询不是更容易吗?这样你做程序就会更容易,也让查询人员一目了然。

     SQL = "SELECT 消费者,消费,用厢日期 FROM 消费表 where not exists" & _
            "(select 实收款 from 收款表 where 消费表.消费者=收款表.消费者 and 消费表.消费=收款表.消费) order by 用厢日期 desc"
        
      SQL = "SELECT sum(消费) FROM 消费表 where not exists" & _
            "(select 实收款 from 收款表 where 消费表.消费者=收款表.消费者 and 消费表.消费=收款表.消费) "
#11
丑八怪先森CR2014-11-26 14:02
库存查询,销售查询,入库查询,库存盘点的代码能否说下下啦。还有添加,删除,修改的,可否写个可以套进去的 谢谢了,初学者
#12
feishi19852014-11-28 21:37
建议你把每种商品弄一个标识码,这样会好很多!
1