注册 登录
编程论坛 SQL Server论坛

問累計金額

jxyga111 发布于 2008-07-18 14:42, 2626 次点击
我要用VB做一个累计金额,字段为:数量,单价,总金额,累计金额
怎么做啊!
只显示出总金额<累计金额30%的数据
如:第一笔为10 那麼第一笔的累计金额就等於10
第二笔为50那麼第二笔的累计金额就等於60
依此類推
25 回复
#2
happynight2008-07-18 15:26
你用什么来区分第一笔和第二笔
假设你用来区分的字段名为"MoID",且字段为整数类型

SELECT MoID,数量,单价,总金额,
       (SELECT SUM(总金额) FROM 表 AS B WHERE B.MoID<=表.MoID) AS 累计金额
FROM 表
ORDER BY MoID

这里我是以比较特殊的(整数)字段来处理的数据,如果没有的话,若是SQL2000
可以考虑将数据导入到一个临时表 且在临时表中用IDENTITY函数构建设一字段,若是SQL2005好象有函数可以直接处理不必要使用临时表(SQL2005没用过,你可上网查询下)
#3
happynight2008-07-18 15:28
若"MoID"字段为其它类型且也能用来区分 就不用这么麻烦的处理了
#4
jxyga1112008-07-18 15:39
可以啊你這是兩個表啊忘記說了
我的兩個表是
a1 left join b1 on a1.id=b1.id
金額和總金額是我建立的,但是數量單價,是以前兩個表里面有的怎么做

[[it] 本帖最后由 jxyga111 于 2008-7-18 15:41 编辑 [/it]]
#5
happynight2008-07-18 15:48
把两个表的字段结构和相关字段说明贴上来
#6
jxyga1112008-07-18 15:52
insert into t_cgamt select b.001,b.002,b.004,b.005,b.006,b.007,a.017,amt=007 * 017,ljamt=0  from a LEFT JOIN b ON a.001=b.001 AND
a.002=b.002 WHERE left(b.002,8) between '" & Text1.Text & "' and '" & Text2.Text & "'"

001單別,002單號,004品號,005品中,006規格,007數量,017金額,AMT總金額,LJAMT累計總金額
總金額=數量* 單價
但是累計金額我卻寫不出來

[[it] 本帖最后由 jxyga111 于 2008-7-18 16:06 编辑 [/it]]
#7
happynight2008-07-18 15:58
呵呵 你要说明下 哪个字段是什么意思 关联的字段又是什么意思
#8
jxyga1112008-07-18 16:06
insert into t_cgamt select b.001,b.002,b.004,b.005,b.006,b.007,a.017,amt=007 * 017,ljamt=0  from a LEFT JOIN b ON a.001=b.001 AND
a.002=b.002 WHERE left(b.002,8) between '" & Text1.Text & "' and '" & Text2.Text & "'"

001單別,002單號,004品號,005品中,006規格,007數量,017金額,AMT總金額,LJAMT累計總金額
總金額=數量* 單價
但是累計金額我卻寫不出來
#9
happynight2008-07-18 16:18
你是怎样判断单的先后顺序的
我假定你的"单别"字段可用来判断先后顺序

insert into t_cgamt
select b.001,b.002,b.004,b.005,b.006,b.007,a.017,amt=007 * 17,
       ljamt=(SELECT SUM(C.007)  FROM b AS C WHERE C.002<=b.002)
from a LEFT JOIN b
     ON a.001=b.001 AND a.002=b.002
WHERE left(b.002,8) between '" & Text1.Text & "' and '" & Text2.Text & "'"

建议你把语句的SELECT 语句部分在查询分析器中调试下 看是否是合理的数据
另外 你写代码的风格有点"野" 最好注意规范代码格式 以及命名原则
#10
jxyga1112008-07-18 16:23
WHERE C.002<=b.002)
你這句是不是寫錯了,002是單號,單號都不等于、單號
#11
happynight2008-07-18 16:25
你先调试下代码 有问题再说 没问题的话 先看看我上面写的提示 如果还有问题的话发上来我们一起研究下
#12
jxyga1112008-07-18 16:27
回复 9# happynight 的帖子
先謝謝你的教導,
但是累計金額比總金額還要小,怎么回事,謝謝
#13
happynight2008-07-18 16:30
恩 估计和用来判断的字段有关,002这个字段存放的数据大概是什么样式的 发一两个上来看看
#14
happynight2008-07-18 16:33
最好说下你单号的编码原则
#15
jxyga1112008-07-18 16:33
單別 單號          品號       品名     規格   數量    單價     總金額   累計金額
3003 20080612001  10012       布格      2*1     5      10       50         求出
3003 20080613002  10121       布條       2*3    10     10       100        求出
如果對照以上兩條數據累計金額應為
50
150

[[it] 本帖最后由 jxyga111 于 2008-7-18 16:36 编辑 [/it]]
#16
happynight2008-07-18 16:34
是否是"年年年年月月日日流水号"的形式
#17
happynight2008-07-18 16:38
==我调试下
#18
jxyga1112008-07-18 16:39
謝謝
#19
happynight2008-07-18 16:51
程序我调试过了 没问题啊

------以下为调试代码,你可在查询分析器中直接运行
Create Table #ls1 (單別 VARCHAR(10),
                   單號 VARCHAR(11),
                   品號 VARCHAR(10),
                   品名 VARCHAR(10),
                   規格 VARCHAR(10),
                   數量 INT,
                   單價 INT,
                   總金額 INT)
INSERT INTO #ls1 VALUES('3003', '20080612001','10012','布格','2*1',5,10,50)
INSERT INTO #ls1 VALUES('3003', '20080613002','10121','布條','2*3',10,10,100)

SELECT * ,(SELECT SUM(總金額) FROM #ls1 B WHERE B.單號<=#ls1.單號)
FROM #ls1

DROP TABLE #ls1

我再仔细看了下你的代码,也好象看不到什么大的问题,你能否将这两个表的部分数据,特别是出错的那几条数据都发给我,是两个表的数据,不是两个表查询合并后的数据
#20
jxyga1112008-07-18 16:54
不是數據出錯而是結果出錯,累計金額應該比總金額多吧
#21
happynight2008-07-18 16:54
快下班了 你晚上还在线否 在的话7:00后见
#22
happynight2008-07-18 16:55
[bo][un]jxyga111[/un] 在 2008-7-18 16:54 的发言:[/bo]

不是數據出錯而是結果出錯,累計金額應該比總金額多吧

我知道 所以 就要你把那条出错的数据和 比他小的单号的几条数据一起发给我 我调试下
#23
jxyga1112008-07-18 16:59
回复 21# happynight 的帖子
明天可以嗎?Dim i As Integer
Private Sub Command1_Click()
If Text1.Text = "" And Text2.Text = "" Then
    MsgBox "琩高兵ンぃ???!"
    Exit Sub
Else
    cn.Execute " delete from t_cgamt  where left(TH002,8) between '" & Text1.Text & "' and '" & Text2.Text & "'"
    strquery = "insert into t_cgamt select TH001,TH002,TH004,TH005,TH006,TH007,TG017,MB064,amt=TH007 * TG017,ljamt=0  from PURTG LEFT JOIN PURTH ON TG001=TH001 AND TG002=TH002 LEFT JOIN INVMB ON TH004=MB001 WHERE left(TH002,8) between '" & Text1.Text & "' and '" & Text2.Text & "'"
    = 0
    cn.Execute strquery


    Set rs = Nothing
    rs.CursorLocation = adUseClient
    rs.Open "select * from t_cgamt where left(TH002,8) between '" & Text1.Text & "' and '" & Text2.Text & "'", cn, 3, 2
   
        MSFcase.Rows = 2
        For j = 0 To MSFcase.Cols - 1
            MSFcase.TextMatrix(MSFcase.Row, j) = ""
        Next
'        Set RS1 = Nothing
'        RS1.Open "select TH001,TH002,TH004,TH005,TH006,TH007,TG017,MB064,amt=TH007 * TG017,ljamt=0  from PURTG LEFT JOIN PURTH ON TG001=TH001 AND TG002=TH002 LEFT JOIN INVMB ON TH004=MB001 WHERE left(TH002,8) between '" & Text1.Text & "' and '" & Text2.Text & "'", cn, 3, 2
'        Call AddRecordtoMSFcase(MSFcase, RS1)
        '仓??肂=羆?肂+羆?肂
        
            MSFcase.TextMatrix(1, 9) = Round(Val(MSFcase.TextMatrix(MSFcase.Row, 8)) + Val(MSFcase.TextMatrix(MSFcase.Row, 8)), 2)

            For i = 1 To MSFcase.Rows - 1
                MSFcase.TextMatrix(MSFcase.Rows - 1, 9) = Round(Val(MSFcase.TextMatrix(MSFcase.Rows - 1, 8)) + Val(MSFcase.TextMatrix(MSFcase.Rows - 1, 8)), 2)
                MSFcase.TextMatrix(MSFcase.Rows - 1, 9) = MSFcase.TextMatrix(MSFcase.Rows - 1, 9) + MSFcase.TextMatrix(MSFcase.Rows - 1, 9)
               
            Next

End If
  If rs.RecordCount >= 1 Then
        Do While Not rs.EOF
            Set xrs = Nothing
            xrs.CursorLocation = adUseClient
            xrs.Open "select TH001,TH002,TH004,TH005,TH006,TH007,TG017,MB064,amt=TH007 * TG017,ljamt=0  from PURTG LEFT JOIN PURTH ON TG001=TH001 AND TG002=TH002 LEFT JOIN INVMB ON TH004=MB001 WHERE left(TH002,8) between '" & Text1.Text & "' and '" & Text2.Text & "'", cn, 3, 2
            If xrs.RecordCount >= 1 Then
                Do While Not xrs.EOF
                    cn.Execute "update t_cgamt set ljamt=" & xrs.Fields(8) & " where left(TH002,8) between '" & Text1.Text & "' and '" & Text2.Text & "'"
                    xrs.MoveNext
                Loop
            End If
End Sub
這是我做的代碼有錯啊麻煩你了
#24
happynight2008-07-19 08:15
兄弟 我来了
#25
jxyga1112008-07-19 08:43
看到了
#26
jxyga1112008-07-19 08:46
麻煩你幫我調試一下
1