回 帖 发 新 帖 刷新版面

主题:SQL语句查询

报表要求如下:
                          货场工作量:2008年4月份结账统计报表
计算单位:
转堆/分钟:火车/吨:汽车/吨:过磅/吨    统计日期:2008年4月24日   统计员:某某
_________________________________________________________________________________
序号 货主名称 品名 场租   转堆 装汽车   收现金   装火车 火车到达 过磅     备注
__________________________________________________________________________________
1    黄沙坪矿  锌  1500    60    1200    0       10          0     1500    未结账

解决的问题在于我的查询语句太繁杂,一共查询的四个表(货主信息表,储运信息表,铲车作业信息表,过称记录信息表)拜托请求大虾能否给予优化呢?

   Set Rs = New ADODB.Recordset
    Set Recordset = New ADODB.Recordset
    
    If Recordset.State <> 0 Then
        Recordset.Close: Set Recordset = Nothing
    End If
    
    Screen.MousePointer = 11
    '这里获取货主表中的(名称,品名,货场租金)三列值.
    GMsql = "select Uname,Uping,URMB from tbGoodsName group by Uname,Uping,URMB order by Uname DESC"
    
    Set Recordset = GAcn.Execute(GMsql)
    
    If Recordset.BOF = False And Recordset.EOF = False Then
        Recordset.MoveFirst: XuHao = 1
        Do Until Recordset.EOF
            With MSF
                .AddItem Empty
                .Row = .Rows - 1: .ROWHEIGHT(.Rows - 1) = 400
                
                .TextMatrix(.Rows - 1, 0) = XuHao
                .TextMatrix(.Rows - 1, 1) = Recordset.Fields(0).Value
                .TextMatrix(.Rows - 1, 2) = Recordset.Fields(1).Value & " "
                .TextMatrix(.Rows - 1, 3) = Recordset.Fields(2).Value
                
                '查询铲车作业表,统计转配矿时间与收现金额.
                GMsql = "select SUM(UTime),SUM(URMB) from tbcar where UDate " &  Between & " and UOwner='" & Recordset.Fields(0).Value & "'" & _
                        " and UHomework='" & "转配矿" & "'"
                        
                Set Rs = GAcn.Execute(GMsql)
                If Rs.BOF = False And Rs.EOF = False Then
                    .TextMatrix(.Rows - 1, 4) = Rs.Fields(0).Value & ""
                    .TextMatrix(.Rows - 1, 6) = Val(.TextMatrix(.Rows - 1, 5)) + Rs.Fields(1).Value & ""
                Else
                    .TextMatrix(.Rows - 1, 4) = Val(.TextMatrix(.Rows - 1, 4)) + 0
                    .TextMatrix(.Rows - 1, 6) = Val(.TextMatrix(.Rows - 1, 5)) + 0
                End If
                Rs.Close
                
                '********************************************************************
                '查询铲车作业表,统计装汽车重量与收现金额
       GMsql = "select SUM(UTime),SUM(URMB) from tbcar where UDate " & Between & _
                        " and UOwner='" & Recordset.Fields(0).Value & "'" & _
                        " and UHomework='" & "装汽车" & "'"
                        
                Set Rs = GAcn.Execute(GMsql)
                If Rs.BOF = False And Rs.EOF = False Then
                    .TextMatrix(.Rows - 1, 5) = Rs.Fields(0).Value & ""
                    .TextMatrix(.Rows - 1, 6) = Val(.TextMatrix(.Rows - 1, 6)) + Rs.Fields(1).Value & ""
                Else
                    .TextMatrix(.Rows - 1, 5) = Val(.TextMatrix(.Rows - 1, 4)) + 0
                    .TextMatrix(.Rows - 1, 6) = Val(.TextMatrix(.Rows - 1, 5)) + 0
                End If
                Rs.Close
                
                '********************************************************************
                '查询储运作业表.统计重量.
                GMsql = "select SUM(UHeavy) from tbTotalwatch where UDate " & Between & _
                        " and UGoodsName='" & Recordset.Fields(0).Value & "'" & _
                        " and UFa_Dao='" & "发运" & "'"
                        
                Set Rs = GAcn.Execute(GMsql)
                If Rs.BOF = False And Rs.EOF = False Then
                    .TextMatrix(.Rows - 1, 7) = Rs.Fields(0).Value & ""
                    
                Else
                    .TextMatrix(.Rows - 1, 7) = Val(.TextMatrix(.Rows - 1, 7)) + 0
                
                End If
                Rs.Close
                
                '********************************************************************
                '查询储运作业表.统计重量
                GMsql = "select SUM(UHeavy) from tbTotalwatch where UDate " & Between & _
                        " and UGoodsName='" & Recordset.Fields(0).Value & "'" & _
                        " and UFa_Dao='" & "到达" & "'"
                        
                Set Rs = GAcn.Execute(GMsql)
                If Rs.BOF = False And Rs.EOF = False Then
                    .TextMatrix(.Rows - 1, 8) = Rs.Fields(0).Value & ""
                    
                Else
                    .TextMatrix(.Rows - 1, 8) = Val(.TextMatrix(.Rows - 1, 8)) + 0
                
                End If
                Rs.Close
                
                '********************************************************************
                '查询地磅过重表。统计重量
                GMsql = "select SUM(Ujin) from TbDiBang where UDate " & Between & _
                        " and Ugoods='" & Recordset.Fields(0).Value & "'"
                        
                Set Rs = GAcn.Execute(GMsql)
                If Rs.BOF = False And Rs.EOF = False Then
                    .TextMatrix(.Rows - 1, 9) = Rs.Fields(0).Value & ""
                    
                Else
                    .TextMatrix(.Rows - 1, 9) = Val(.TextMatrix(.Rows - 1, 9)) + 0
                
                End If
                Rs.Close
                
            End With
            Recordset.MoveNext: XuHao = XuHao + 1
        Loop
        
        MSF.AddItem Empty
        MSF.TextMatrix(MSF.Rows - 1, 1) = "合计:" & XuHao - 1 & "项"
        '合计:
        With MSF
        Dim temp As Single
            '从第三行,三列,开始
            .Row = 3: .Col = 3: temp = 0
            .ROWHEIGHT(.Rows - 1) = 500
            
            For i = 3 To .Cols - 2
                temp = Val(.TextMatrix(.Row, i))
                For j = (.Row + 1) To .Rows - 1
                    
                    temp = temp + Val(.TextMatrix(j, i))
                Next
                .CellFontSize = 11
                .CellAlignment = flexAlignCenterCenter     '内容居中、居中对齐
                .TextMatrix(.Rows - 1, i) = temp & ""
                temp = 0
            Next
            
        End With
    Else
        Betweenstr = Right(Between, Len(Between) - 9)
        MsgBox "目前没有:" & Betweenstr & "的数据可查询!", vbExclamation, "查询错误"
        Rs.Close: Set Rs = Nothing
        Recordset.Close: Set Recordset = Nothing
        Exit Function
    End If

回复列表 (共2个回复)

沙发

花眼,
建议你:
列举出四个表的表名和字段,然后描述你要查询的条件和结果(指字段名)

代码多了看得眼花缭乱

板凳

四份表
表名称:tbGoodsName    /*货主表*/
    
UID         smallint identity primary key,    
Uname         varchar(50)    not null,--1货主名称。
Uping         varchar(20)    null    ,--2品名
Utel         varchar(50)    null    ,--3电话
Ugoods         varchar(30)    null    ,--4货位
UcompanyName    varchar(100)    null    ,--5公司名称
UAddress         varchar(255)    null    ,--6住址。    
URMB         float        default(0),--7场租金。
URemarks         text        null    --8备注


表名称:tbTotalwatch /*储运日作业表*/
UID    smallint identity primary key,    
UDate              datetime               not null,--1作业日期
UKeepName              varchar(20)     not null,--2储运人员
USe_from              varchar(20)     not null,--3自(共)用
UFa_Dao        varchar(20)     not null,--4发运或到达
UGoodsName               varchar(100)     not null,--5发货人名称
UTel_1        varchar(20)      null,    --6联系电话
UAccept        varchar(100)     not null,--7收货人名称
UTel_2        varchar(20)       null,    --8联系电话
UStationName    varchar(20)     not null,--9发(到)站名
UPingName              varchar(20)     not null,--10货物名称
UPiece_Number    int         null,    --11件数
UAppearance    varchar(20)     not null,--12货物状态
UCar        varchar(20)     not null,--13车种车号
UHeavy        int        default(60),--14重   量
UGoods        varchar(20)     not null,--15装卸货位
UNumber_1              varchar(20)       null,    --16货票号码
UTools         varchar(20)     not null,--17装卸工具,装卸方式
UPerson        varchar(20)     not null,--18装卸人员
UNumber_2               varchar(20)       null,    --19运输号码
UNumber_3               varchar(20)       null,    --20蓬布号码
URemarks               text                not null --21备注


表名称:tbcar /*铲车日作业表*/
(
UID    smallint identity primary key,
UDate    datetime      not null,--1作业日期
UName       varchar(20)     not null,--2当班储运人
Uname2    varchar(20)     not null, --3当班司机
UOwner      varchar(100)     not null,--4货主
Upimin    varchar(8)     not null,--5品名
UGoods    varchar(30)     not null,--6货位
UHomework     varchar(10)     not null,--7作业类型(转堆,装汽车,装火车)
UYesNo      varchar(8)     not null,--8是否收取现金
UTime       float         not null,--9时间(吨位)
UNmber    varchar(50)    not null,--10计算单位(分钟,吨)
URMB        money          null    ,--11收取金额
UNumber    varchar(50)    not null,--12通知单号码。
URemarks    text        null     --13备注    

表名称:TbDiBang /*地磅表*/
UID     smallint identity primary key,    --序号
UDate     DATETIME           not null,--1日期    
Ugoods     varchar(100)     not null,--2货主名称
UpinName   varchar(10)       not null,--3品名
UNumber     varchar(50)      null,--4磅单号    
Ucar     varchar(30)      null,--5车号    
Umai     float           null,--6毛重    
Upi     float           null,--7皮重    
Ujin     float           null,--8净重/吨
UsiBan     varchar(30)     not null,--9司磅员    
URemarks    text          null --10备注


查询报表要求如下:

计算单位:转堆/分钟:火车/辆
汽车/吨:过磅/吨           统计日期:2008年4月24日       统计员:某某
--------------------------------------------------------------------------
序号 货主名称  品名  场租  转堆  装汽车  收现金 装火车 火车到达  过磅  备注
---------------------------------------------------------------------------
1    黄沙坪矿   锌       1500    60   1200    0   10       0       0      1500        

我来回复

您尚未登录,请登录后再回复。点此登录或注册