表结构如下
机构代码     变更更正机构           变更更正内容 变更更正类型 变更更正时间
340200010100 芜湖市公安局镜湖派出所 NULL         0            2006-5-24
340200010100 芜湖市公安局镜湖派出所 NULL         0            2006-5-25
340200010100 芜湖市公安局镜湖派出所 NULL         1            2006-5-26
340200010100 芜湖市公安局镜湖派出所 NULL         1            2006-5-27
340200010100 芜湖市公安局镜湖派出所 NULL         2            2006-5-28
340200010100 芜湖市公安局镜湖派出所 NULL         2            2006-5-29
340200010200 芜湖市公安北门派出所   NULL         0            2006-5-30
340200010200 芜湖市公安北门派出所   NULL         0            2006-5-31
340200010200 芜湖市公安北门派出所   NULL         1            2006-6-01
340200010200 芜湖市公安北门派出所   NULL         1            2006-6-02
340200010200 芜湖市公安北门派出所   NULL         2            2006-6-03
340200010200 芜湖市公安北门派出所   NULL         2            2006-6-04(注:变更更正类型字段说明 0:添加 1:更新 2:删除)当不加时间限制时得到如下结果
变更更正机构 添加 更新 删除
芜湖市公安局镜湖派出所 2 2 2
芜湖市公安北门派出所 2 2 2
加入时间限制时得到如下结果(如 变更更正时间>=2006-5-30)
变更更正机构 添加 更新 删除
芜湖市公安北门派出所 2 2 2

解决方案 »

  1.   

    select 变更更正机构,count(decode(变更更正类型,0,1)) "添加",
           count(decode(变更更正类型,1,1)) "更新",
           count(decode(变更更正类型,2,1)) "删除"
    from   tablename
    group by 变更更正机构有时间限制则加上where 条件:
    where 变更更正时间>= to_date('2006-5-30','yyyy-mm-dd')
      

  2.   

    如果不寫成視圖挺好實現的。
    但是爲什麽一定要寫成試圖那?寫成視圖比較難
    因爲關鍵就是這個時間的處理。
    這個時間不能被包含到視圖的where條件裏。
    而是要在在select試圖時下時間條件,是這個意思不?
      

  3.   

    duanzilin(寻) ( ) ,非常正确!regard!
      

  4.   

    为了达到根据时间查询的目的(感谢大家特别是duanzilin(寻)的帮助),小弟写一个包详细代码如下//包声明
    PACKAGE ROOMINFO_PACKATGE IS
       type c_Type is ref cursor;   PROCEDURE countrecord
         (input_date IN varchar2,
           mycursor OUT c_Type);
    END;//包体
    PACKAGE BODY ROOMINFO_PACKATGE IS
       
       PROCEDURE countrecord
        (input_date IN varchar2,
           mycursor OUT c_Type)
        IS
       BEGIN
           open mycursor for
           select 变更更正机构,
                  count(decode(变更更正类型,0,1)) "添加",
                  count(decode(变更更正类型,1,1)) "更新",
                  count(decode(变更更正类型,2,1)) "删除"
           from roominfo_histroy a
           where 变更更正时间>= to_date(input_date,'yyyy-mm-dd')
           group by 变更更正机构;
       END;END;在VB代码中写如下代码
    dim dbconn As ADODB.Connection
    dim rs As ADODB.Recordset
    dim dbcmd As ADODB.Command
    dim dbpara As ADODB.Parameter
    dim constr as stringSet dbconn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    Set dbcmd = New ADODB.Command
    Set dbpara = New ADODB.Parameter
    constr = "Provider=OraOLEDB.Oracle;Persist Security Info=True;User ID=gps;Password=gps;Data Source=test_easymap"
    dbconn.CursorLocation = 1
    dbconn.ConnectionString = constr
    dbconn.Open
    dbcmd.CommandType = 1
    Set dbcmd.ActiveConnection = dbconn
    dbcmd.CommandText = "{call ROOMINFO_PACKATGE.countrecord(?)}"
    Set dbpara = dbcmd.CreateParameter("input_date", adVarChar, adParamInput, 10)
    dbpara.Value = "2006-05-30"
    dbcmd.Parameters.Append dbpara
    rs.CursorType = adOpenStatic
    rs.LockType = adLockReadOnly
    Set rs.Source = dbcmd
    rs.OpenIf rs.RecordCount > 0 Then
        Set MSHFlexGrid1.Recordset = rs
    End If可是在运行时出错,提示“PLS-00306:调用'COUNTRECORD'时参数个数或类型错误”的错误信息,此时程序停止在rs.open这一行小弟上网查过资料好像是说ADO不能调用带返回记录集的存储过程,真是如此吗?真是好事多磨,有劳大家了.
      

  5.   

    终于找到解决办法了,谢谢大家的帮助,再次感谢duanzilin(寻) 开始结贴。