首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 再问材料出入明细帐 [已结帖,结帖人:jskscxy]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jskscxy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2007-05-29 11:12:23 楼主
    表1:盘点表(每月月底将盘点的实际数量输进去)
    字段:
    盘点日期       产品名称       盘点数量
    2007-4-28     AAAA               2000
    ...
    表2:材料出入明细表(当月材料出入明细)
    字段:
    出入库日期       产品名称     收发类型     数量
    2007-5-29           AAAA             入库           1000
    2007-5-29           bbbb             入库           2000
    2009-5-30           AAAA             出库             50
    ...
    要实现的结果:
    ---------------------------------------------------------------
    日期               产品名称       收发类型       入库数量       出库数量       结存数量
    ---------------------------------------------------------------
                            AAAA             期初结存                                                   2000
    2007-5-29       AAAA             入库               1000                                     3000
    2007-5-30       AAAA             出库                                         50               2950
    ...

    拜托了...
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ljsql
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 11:26:521楼 得分:0
    select   产品名称,日期,收发类型,
    入库数=case   收发类型   when   '入库 '   then   数量   end,
    出库数=case   收发类型   when   '出库 '   then   数量   end,
    [结存]=(select   sum(case   收发类型   when   '入库 '   then   数量   else   -数量   end)  
    from   test   where   日期 <=a.日期)
    from  
    (select   *   from   test   union   all
        select   盘点日期,       产品名称, '期初结存 ',   盘点数量,
      from   盘点表   )   a


    盘点日期       产品名称       盘点数量
    2007-4-28     AAAA               2000
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fa_ge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 11:27:322楼 得分:20
    select   a.出入库日期,a.产品名称,b.入库数量,b.出库数量,(b.入库数量+b.出库数量+c.盘点数量)as   结存数量
    from   A   a
    left   join
    (
    select   产品名称   ,sum(case   when   收发类型= '入库 '   then   数量   else   0   end)as   入库数量,
                                    sum(case   when   收发类型= '出库 '   then   -数量   else   0   end)as   出库数量
    from   A   --出入明细表
    group   by   产品名称
    )B   b   on   a.产品名称=b.产品名称
    left   join
    (
    select   产品名称   ,     isnull(盘点数量,0)as   盘点数量     from   B   --盘点表
    )c   on   a.产品名称=c.产品名称
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ljsql
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 11:28:433楼 得分:0
    在昨天的上面加入盘点表数据,让查找表变成:


    出入库日期       产品名称     收发类型     数量
    2007-4-28         AAAA             期初结存   2000
    ..........

    2007-5-29           AAAA             入库           1000
    2007-5-29           bbbb             入库           2000
    2009-5-30           AAAA             出库             50
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ljsql
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 11:33:264楼 得分:30
    select   产品名称,日期,收发类型,
    入库数=case   收发类型   when   '入库 '   then   数量   end,
    出库数=case   收发类型   when   '出库 '   then   数量   end,
    [结存]=(select   sum(case   收发类型   when   '入库 '   or   '期初结存 '   then   数量+   else   -数量   end)  
    from   test   where   日期 <=a.日期)
    from  
    (select   *   from   test   union   all
        select   盘点日期,       产品名称, '期初结存 ',   盘点数量,
      from   盘点表   )   a
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jskscxy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 11:41:485楼 得分:0
    请问ljsql:
    您的test表是什么意思?

    谢谢!见笑了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jskscxy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 11:44:156楼 得分:0
    ljsql
    不好意思!明白了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jskscxy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 12:03:437楼 得分:0
    select   产品名称,日期,收发类型,
    入库数=case   收发类型   when   '入库 '   then   数量   end,
    出库数=case   收发类型   when   '出库 '   then   数量   end,
    [结存]=(select   sum(case   收发类型   when   '入库 '   or   '期初结存 '   then   数量+   else   -数量   end)  
    from   test   where   日期 <=a.日期)
    from  
    (select   *   from   test   union   all
        select   盘点日期,       产品名称, '期初结存 ',   盘点数量,
      from   盘点表   )   a
    通不过,提示   or   错误
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ljsql
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 12:05:228楼 得分:0
    case   收发类型   when   '入库 '   or   '期初结存 '

    换在   case   when   收发类型= '入库 '   or   收发类型= '期初结存 '
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bill024
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 12:55:009楼 得分:50
    create   table   盘点表(盘点日期   datetime,产品名称   varchar(20),盘点数量   int)
    create   table   明细表(出入库日期   datetime,产品名称   varchar(20),收发类型   varchar(20),数量   int)

    insert   盘点表   select   '2007-4-28 ', 'AAAA ',2000
    union   all   select   '2007-5-29 ', 'bbbb ',3000

    insert   明细表   select   '2007-5-29 ', 'AAAA ', '入库 ',1000
    union   all   select   '2007-5-29 ', 'bbbb ', '入库 ',2000
    union   all   select   '2009-5-30 ', 'AAAA ', '出库 ',50

    select   日期,产品名称,收发类型,入库数,出库数,结存数量   from  
    (
    select   top   100   percent   日期=null,产品名称,收发类型= '期初结存 ',入库数=null,出库数=null,结存数量=盘点数量,bh=1   from   盘点表  
    union   all
    select   top   100   percent   出入库日期,产品名称,收发类型,入库数=case   收发类型   when   '入库 '   then   数量   end,
    出库数=case   收发类型   when   '出库 '   then   数量   end,
    结存数量=(select   sum(case   收发类型   when   '入库 '   then   数量   else   -数量   end)  
    from   明细表   where   出入库日期 <=a.出入库日期),bh=2
    from   明细表   a
    order   by   产品名称,bh
    )b
    order   by   产品名称,b.bh

    drop   table   盘点表,明细表

    /*
    日期                         产品名称                 收发类型             入库数               出库数         结存数量                
    --------------------------   ---------   ---------------   -----------   -----------   ------
    NULL                                           AAAA                         期初结存           NULL                 NULL                 2000
    2007-05-29   00:00:00.000     AAAA                         入库                   1000                 NULL                 3000
    2009-05-30   00:00:00.000     AAAA                         出库                   NULL                 50                     2950
    NULL                                           bbbb                         期初结存           NULL                 NULL                 3000
    2007-05-29   00:00:00.000     bbbb                         入库                   2000                 NULL                 3000

    (所影响的行数为   5   行)*/
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fa_ge
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 13:28:0310楼 得分:0
    bill024(咖啡熊)
    你在冲星星吧,呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bill024
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 13:33:3611楼 得分:0
    没有,大家互相学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bill024
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 13:36:1612楼 得分:0
    我距离星星还很遥远
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jskscxy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 14:36:5513楼 得分:0
    请教bill024:
    我现已经将查找表做成这样
    ------------------------------------
    出入库日期       产品名称     收发类型     数量
    2007-4-28         AAAA             期初结存   2000
    2007-5-29           AAAA             入库           1000
    2007-5-29           bbbb             入库           2000
    2009-5-30           AAAA             出库             50
    ...
    ----------------------------------

    下面这段运行通过得出上面的结果,接下来该如何写呢,兄弟我实在太菜
    @QCStartDate   datetime   =   '2007-4-01 ',
    @QCEndDate       datetime   =   '2007-4-27 ',
    @DyStartDate   datetime   =   '2007-4-27 ',
    @DyEndDate       datetime   =   '2007-5-30 '
    AS  
    DECLARE   @tblTemp   TABLE
    (
    TDate                 datetime,
    ProductID         int,
    ProductName     varchar(100),
    ProductSpec     varchar(100),
    ProjectClass   varchar(50),
    Qty   int
    )
    INSERT   @tblTemp   (TDate,ProductID,ProductName,ProductSpec,ProjectClass,Qty)

    SELECT   CheckDate,ProductID,ProductName,ProductSpec, '期初结存 ',SUM(PassQty)
    FROM   tblCheckZCP
    WHERE   CheckDate   BETWEEN   @QCStartDate   AND   @QCEndDate
    GROUP   BY   CheckDate,ProductID,ProductName,ProductSpec

    UNION   ALL
    SELECT   RptDate,ProductID,   ProductName,   ProductSpec,ProjectClass,SUM(Qty)
                FROM   tblProjectDayRpt
                WHERE   ProjectClass   =   '入库单 '   AND
                            RptDate   BETWEEN   @DyStartDate   AND   @DyEndDate
    GROUP   BY   RptDate,ProductID,   ProductName,   ProductSpec,ProjectClass

    UNION   ALL
    SELECT   RptDate,ProductID,   ProductName,   ProductSpec, '出库单 ',SUM(Qty)
                FROM   tblProjectDayRpt
                WHERE   ProjectClass   =   '出库单 '   OR  
                            ProjectClass   =   '不良单 '   AND  
                            RptDate   BETWEEN   @DyStartDate   AND   @DyEndDate            
    GROUP   BY   RptDate,ProductID,   ProductName,   ProductSpec
    麻烦了...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jskscxy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 15:16:0314楼 得分:0
    再加50分,救命了!月底最后一天了,明天结帐
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jskscxy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-29 17:19:3215楼 得分:0
    终于差不多了,但有点问题
    我的日期格式是   2007-05-10
    如果同一天有入库也有出库的话就不对了
    请问这个问题如何解决?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sunshine09010208
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-30 10:46:0616楼 得分:0
    和我做的一样啊
    哈哈   同志
    交叉查询吧  
    实在不行的话
    开游标
    比较好用
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jskscxy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-05-30 21:33:5717楼 得分:0
    啊!终于搞定了!
    由衷地感谢各位热心的朋友...
    修改 删除 举报 引用 回复