| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 581 人关注过本帖
标题:在sqlserver 视图中显示库存怎么做?
只看楼主 加入收藏
ckassassin
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-11-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
在sqlserver 视图中显示库存怎么做?
有入库表与出库、库位表表个一张

内容如下
入库:X_SE_RK_MX
字段 ID   单号   商品名称  色号  生产日期  批号  数量
出库:X_SE_CK_MX
字段 ID   仓位ID  单号  商品名称  色号 生产日期 批号 数量
库位表:WFdisk
字段 ID   QW   KF   cDate  JG_NO
-----------------------------------------表代码--------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[WFdisk]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[WFdisk]
GO

CREATE TABLE [dbo].[WFdisk] (
    [ID] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,
    [QW] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [KF] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [cDate] [datetime] NULL ,
    [JG_NO] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[X_SE_RK_MX]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[X_SE_RK_MX]
GO

CREATE TABLE [dbo].[X_SE_RK_MX] (
    [ID] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,
    [单号] [char] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [商品名称] [char] (64) COLLATE Chinese_PRC_CI_AS NULL ,
    [色号] [char] (25) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [生产日期] [datetime] NULL ,
    [批号] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [数量] [numeric](18, 2) NOT NULL
) ON [PRIMARY]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[X_SE_CK_MX]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[X_SE_CK_MX]
GO

CREATE TABLE [dbo].[X_SE_CK_MX] (
    [ID] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,
    [仓位ID] [numeric](18, 0) NULL ,
    [单号] [char] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [商品名称] [char] (64) COLLATE Chinese_PRC_CI_AS NULL ,
    [色号] [char] (25) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [生产日期] [datetime] NULL ,
    [批号] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [数量] [numeric](18, 2) NOT NULL
) ON [PRIMARY]
GO
-------------------------------------------------------------------------------------
我用这三张表,做了如下的视图,但总是显示重复数据,请问大家有什么好办法处理?我不想用处理 重复数居的函数
我想要一个不会显示重复数据的视图。请大家帮忙想想,谢谢!
SELECT dbo.WFdisk.KF AS 库房, dbo.WFdisk.QW AS 仓位, dbo.X_SE_RK_MX.商品名称,
      dbo.X_SE_RK_MX.色号, dbo.X_SE_RK_MX.生产日期, dbo.X_SE_RK_MX.批号,
      dbo.X_SE_RK_MX.数量 AS 入库数量,
          (SELECT 数量
         FROM X_SE_CK_MX
         WHERE 仓位ID = wfdisk.id AND 商品名称 = x_se_rk_mx.商品名称 AND
               色号 = x_se_rk_mx.色号 AND 生产日期 = x_se_rk_mx.生产日期 AND
               批号 = x_se_rk_mx.批号) AS 出库数量, dbo.X_SE_RK_MX.数量 -
          (SELECT 数量
         FROM X_SE_CK_MX
         WHERE 仓位ID = wfdisk.id AND 商品名称 = x_se_rk_mx.商品名称 AND
               色号 = x_se_rk_mx.色号 AND 生产日期 = x_se_rk_mx.生产日期 AND
               批号 = x_se_rk_mx.批号) AS 剩余数量
FROM dbo.X_SE_RK_MX INNER JOIN
      dbo.X_SE_RK_ZY ON dbo.X_SE_RK_MX.单号 = dbo.X_SE_RK_ZY.单号 INNER JOIN
      dbo.WFdisk ON dbo.X_SE_RK_ZY.仓位ID = dbo.WFdisk.ID CROSS JOIN
      dbo.X_SE_CK_MX

[ 本帖最后由 ckassassin 于 2012-11-28 13:03 编辑 ]
搜索更多相关主题的帖子: 商品 where 
2012-11-28 12:59
半杯清茶
Rank: 4
等 级:业余侠客
威 望:6
帖 子:39
专家分:297
注 册:2012-11-13
收藏
得分:14 
为什么不用distinct 呢?个人认为理论上不可行,多对多的关系,就会形成迪卡尔集。
2012-11-28 16:46
ckassassin
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-11-28
收藏
得分:0 
回复 2楼 半杯清茶
重复数据量太大,会达到4千万以上,用重复命令SQL计算起来会慢,要是单机来做的话还勉强
2012-11-29 09:27
半杯清茶
Rank: 4
等 级:业余侠客
威 望:6
帖 子:39
专家分:297
注 册:2012-11-13
收藏
得分:0 
如果你可以找到第三张表能建立一对多的关系,然后用连接去关联,应当可以达到你要的效果。
2012-11-30 09:03
ckassassin
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-11-28
收藏
得分:0 
回复 4楼 半杯清茶
师傅帮我解决啦,各位,谢啦
2012-11-30 15:39
ckassassin
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-11-28
收藏
得分:0 
回复 3楼 ckassassin
SELECT c.KF AS 库房, c.QW AS 仓位, a.商品名称, a.色号, a.生产日期, a.批号, a.入库数量,
      ISNULL(d.出库数量, 0) AS 出库数量, ISNULL(a.入库数量, 0) - ISNULL(d.出库数量, 0)
      AS 剩余数量
FROM (SELECT a.商品名称, a.色号, a.生产日期, a.批号, SUM(a.数量) AS 入库数量,
              b.仓位ID
        FROM dbo.X_SE_RK_MX a LEFT OUTER JOIN
              dbo.X_SE_RK_ZY b ON a.单号 = b.单号
        WHERE a.删除标记 = '0' AND b.删除标记 = '0'
        GROUP BY a.商品名称, a.色号, a.生产日期, a.批号, b.仓位ID) a LEFT OUTER JOIN
          (SELECT a.商品名称, a.色号, a.生产日期, a.批号, a.仓位ID, SUM(ISNULL(a.数量, 0))
               AS 出库数量
         FROM dbo.X_SE_CK_MX a
         WHERE a.删除标记 = '0'
         GROUP BY a.商品名称, a.色号, a.生产日期, a.批号, a.仓位ID) d ON
      d.商品名称 = a.商品名称 AND d.色号 = a.色号 AND d.生产日期 = a.生产日期 AND
      d.批号 = a.批号 AND a.仓位ID = d.仓位ID INNER JOIN
      dbo.WFdisk c ON a.仓位ID = c.ID



师傅帮我搞定的,大家参考一下
2012-11-30 15:41
快速回复:在sqlserver 视图中显示库存怎么做?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020902 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved