求SQL语句,请路过大侠HELP(50)

  • 主题发起人 主题发起人 yjhbeer
  • 开始时间 开始时间
Y

yjhbeer

Unregistered / Unconfirmed
GUEST, unregistred user!
select *,(isnull(cRkQuantity,0)-isnull(cCkQuantity,0)) as cQuantity from (select a.cWareHouse,b.cInvCode,b.cInvName,b.cInvStd,b.cGgxh,case when ((a.cLklx='采购入库') or (a.cLklx='其他入库')) then b.cQuantity end as cRkQuantity,case when ((a.cLklx='销售出库') or (a.cLklx='其他出库')) then b.cQuantity end as cCkQuantity from cCgglrk a,cCgglrks b where a.id=b.id ) a 我这样可以计算出,入库数量,出库数量,结存数量。我要达到的效果是:上一行的结存数+下一行入库数量-出库数量=结存,每一行以此类推都这样计算,该怎么写,请大侠多指教,谢谢!计算出来的结果如下:货物 入库 出库 结存A 10 10A 30 40A 11 29 依此类推...
 
给出cCgglrk的表结构,才能判断“上一行”与“下一行”的鉴别方法这么麻烦,不如在cCgglrk表中增加一个字段:结存数量,每次增加cCgglrk表时,往上累算。
 
主表的ID应该是主键吧,那子表的主键是什么??如果没有主键,那按什么排序呢?不可能随便排吧。
 
寻找男友→正在上海工作的单身男子 本人女。 1986年7月21日生人 1.63高 95斤左右 本人学历大学本科 非诚勿扰 ┌┓┏┰┰━┐゛ oˊ ┍┓┏┒ˋ┍━┐ ┊┗┙┣┫┃┃┍━┒ ┃└┛┟━┫┃┃ ┃┎┓┃┇┏┘┖━┘ ┃┏┒┃│┃┏┚ └┛┗┴┻┘′﹫ "  └┛┗┻━┻┘ 要求。。幽默 大方有安全感 的男生 o(∩_∩)o...哈哈 本女QQ{280093195必须在上海地区随随便便的人请不要加了。本人诚意找男朋友.谢谢—│ ┌———┘ ┘ ┌———│  │ │  │  —┘│ │ │  │ ┌——┌┘ —┘│—┌┘│  │ │  │  —┘│——┘│  │ │  │  ┌││┌—││  ┘ —┘ —┘ —┘┘——┘┘
 
楼上的女的一定是没人要的,到处叫街
 
去上“非诚勿扰”啊!!!!
 
如果不想在cCgglrk表中增加一个字段:结存数量,每次增加cCgglrk表时,往上累算。那么,就可以在Select出来之后。在DataSet里面做个从头到尾的遍历,把结存数量通过delphi代码写进去。如果硬要在select里面写出,也不是不行,就比较慢了。select a.cInvCode, 结存数量=Sum(Select cQuantity from cCgglrks where id in(select id from cCgglrk where id<=a.id and ((cLklx='采购入库') or (cLklx='其他入库'))))- Sum(Select cQuantity from cCgglrks where id in(select id from cCgglrk where id<=a.id and ((cLklx='销售出库') or (cLklx='其他出库'))))from cCgglrks a注意:如果ID不是顺序递增的话,上面的方法就不适用
 
这个我写过,用存储过程来写 很好实现。
 
我觉得还是 在 表中 增加 结存数量会比较好做,省时省力
 
表结构:主表cCgglrk :字段ID,cWareHouse 仓库 cLklx 出、入库类型(采购入库、其他入库、销售出库、其他出库) cIdItem 自增型 子表cCgglrks字段:ID,cInvCode 存货编码 cInvName 存货名称 cInvStd 计量单位 cGgxh 规格型号 cQuantity 数量 cPrice 价格 cMoney 金额 cIdItem 自增型主表ID=子表ID
 
楼上语句在查询分析器里运行,显示有误,通不过,能不能再帮我一下,谢谢!
 
显示什么错误?贴出来我才好改
 
提示以下错误信息,谢谢你帮我指出,你能告诉我你的QQ号吗?我想跟你远程一下,我的QQ:21081130服务器: 消息 156,级别 15,状态 1,行 2在关键字 'Select' 附近有语法错误。服务器: 消息 170,级别 15,状态 1,行 2第 2 行: ')' 附近有语法错误。服务器: 消息 156,级别 15,状态 1,行 4在关键字 'from' 附近有语法错误。
 
帮你顶,我也想知道,期待高手解答!!
 
只是个人感觉,没有测试过。先说一下上面的那个SQL语句,SUM不能放在SELECT外面,要放在SELECT里面,即,不是SUM(select....),而是select sum(..)....。再说一下我们的做法。首先,可以定义一个视图cCgglrksView,用来连接两个表。(也可以不用视图,我这里用视图只是方便后面的语句不太乱。)视图的语句是:select a.cLklx,b.cInvCode,b.cQuantity from cCgglrk a,cCgglrks b where a.id=b.id接下来就是实现的SQL语句了:select a.cInvCode,case when ((a.cLklx='采购入库') or (a.cLklx='其他入库')) then a.cQuantity end as cRkQuantity,case when ((a.cLklx='销售出库') or (a.cLklx='其他出库')) then a.cQuantity end as cCkQuantity ,a.cQuantity +isnull(d.rksl,0)-isnull(e.cksl,0) jysl from cCgglrksView a left join (select c.id,sum(case when ((b.cLklx='采购入库') or (b.cLklx='其他入库')) then b.cQuantity end) rksl from cCgglrksView b left join cCgglrksView c on b.id<c.id group by c.id) d on a.id=d.idleft join (select c.id,sum(case when ((b.cLklx='销售出库') or (b.cLklx='其他出库')) then b.cQuantity end) cksl from cCgglrksView b left join cCgglrksView c on b.id<c.id group by c.id) e on a.id=e.id
 
zbdzjx说得对,我一时疏忽写错了。把sum放里面就可以了。select a.cInvCode, 结存数量=(Select Sum(cQuantity) from cCgglrks where id in(select id from cCgglrk where id<=a.id and ((cLklx='采购入库') or (cLklx='其他入库'))))- (Select Sum(cQuantity) from cCgglrks where id in(select id from cCgglrk where id<=a.id and ((cLklx='销售出库') or (cLklx='其他出库'))))from cCgglrks a
 
谢谢楼上,我已按照你的意思,建立视图即可解决了,本人万分感谢!分数已给。
 
用UNIon all也行。我计算库存一般都是这样写的。结存数据正数 into #临时表union all入库数据 -正数union all出库数据 -负数然后再对临时表进行统计。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
759
import
I
后退
顶部