留下你的QQ号码,我在QQ中帮你解答这问题!

解决方案 »

  1.   

    你的B表和C表有什么关系吗?D表是按哪些字段分组?
    对B表分组之后SUM数量就应可以得到D的结果,借助类型用DECODE函数处理数量,DECODE(类型,‘R’,数量,'C',-1*数量)。SELECT 分组字段,SUM(DECODE(类型,‘R’,数量,'C',-1*数量)) FROM  B 表 GROUP BY 分组字段SQL SERVER中有和DECODE函数类似的IIF。
      

  2.   


    有 DECODE吗??!
    Select 单位代码,  物品代码,  批次, Sum(数量) as 出库数量-入库数量
    From (
    Select 单位代码, 物品代码, 批次, case 类型 when 'R' then 数量 when 'C' then 0-数量 end as 数量
    From B
    union all
    Select 单位代码, 物品代码, 批次, case 类型 when 'R' then 数量 when 'C' then 0-数量 end as 数量
    From C
    ) as F
    Group By 单位代码, 物品代码,  批次这个语句试试吧~~~~~
      

  3.   

    B表和C表有什么区别吗?
    decode在oracle中是存在的
      

  4.   

    Select 单位代码,  物品代码,  批次, Sum(数量) as 出库数量-入库数量
    From (
    Select 单位代码, 物品代码, 批次, case 类型 when 'R' then 数量 when 'C' then 0-数量 end as 数量
    From B
    union all
    Select 单位代码, 物品代码, 批次, case 类型 when 'R' then 数量 when 'C' then 0-数量 end as 数量
    From C
    ) as F
    Group By 单位代码, 物品代码,  批次
      

  5.   

    实现:用一句SQL语句实现应当有两种方法:
    1 类似的 case ... when ... then ... when ... then .. else ... end 但是扩展性不好,如果增加一种入库或者入库类型则需要修改程序.
    2 增加一个表类似于
      出入库类型   数据方向
      出库           -1
      入库           1
      盘盈           1
      .....
      然后多连接一个表,反正这个表不会太大.但是:你写的程序是否考虑过效率?出库和入库流水表的数量级是多少?如果很大,那末就等着三个月后重写程序吧. 建议用最简单的方法:建议个临时表用于相关的查询和计算
      

  6.   

    谢谢大家的帮忙,我早上写了一条语句,大概跟大家的思路差不多。现在有个问题就是,因为在我的A表中物品代码是可以重复的,现在我只需要的不重复的物品代码,然后根据单位代码,批次,物品代码去查B,C中相应的关于这个批次的物品代码的出入库纪录,B表是当前的库存操作纪录,C表是历史库存
    操作纪录。干脆我把我的语句贴出来,大家看看吧
    SELECT 单位代码,批次,物品代码,SUM(数量) AS 数量
    FROM
    (
    select   A.单位代码,A.批次,A.物品代码,
    (CASE WHEN B.类型='C' THEN B.数量 
          WHEN B.类型='R' THEN -B.数量 END)  数量
    from A
    LEFT OUTER JOIN B 
    ON   B.单位代码=A.单位代码
    AND  B.物品代码=A.物品代码
    AND  A.批次=A.批次
    where A.单位代码='11'
    AND   A.批次='1'
    UNION ALL
    select   A.单位代码,A.批次,A.物品代码,
    (CASE WHEN B.类型='C' THEN C.数量 
          WHEN B.类型='R' THEN -C.数量 END)  数量
    from A
    LEFT OUTER JOIN C 
    ON   C.单位代码=A.单位代码
    AND  C.物品代码=A.物品代码
    AND  C.批次=A.批次
    where A.单位代码='11'
    AND   A.批次='1'
    )
    GROUP BY 单位代码,批次,物品代码
    因为A中有的物品代码在B,C中不一定有,所以我用了LEFT OUTER JOIN,但现在是因为A中的物品有重复的,搞得我JOIN出来的纪录有重复,我想用DISTINCT,但似乎不起作用。大家有空看看吧,谢谢了。
      

  7.   

    SELECT 单位代码,批次,物品代码,SUM(数量) AS 数量
    FROM
    (
    select   A.单位代码,A.批次,A.物品代码,
    (CASE WHEN B.类型='C' THEN B.数量 
          WHEN B.类型='R' THEN -B.数量 END)  数量
    from A
    LEFT OUTER JOIN B 
    ON   B.单位代码=A.单位代码
    AND  B.物品代码=A.物品代码
    AND  B.批次=A.批次  //刚才这里错了,现在改过来了
    where A.单位代码='11'
    AND   A.批次='1'
    UNION ALL
    select   A.单位代码,A.批次,A.物品代码,
    (CASE WHEN B.类型='C' THEN C.数量 
          WHEN B.类型='R' THEN -C.数量 END)  数量
    from A
    LEFT OUTER JOIN C 
    ON   C.单位代码=A.单位代码
    AND  C.物品代码=A.物品代码
    AND  C.批次=A.批次
    where A.单位代码='11'
    AND   A.批次='1'
    )
    GROUP BY 单位代码,批次,物品代码不好意思了,这几天人比较累。出了点小问题。
      

  8.   

    对了,随便问一下DB2中有没有DECODE?我刚才用了一下,老说我错,大家有没有DB2的DECODE例子,能不能贴出来造福一下全人类?