我程式功能為根據客戶提供的近10000條serial_number   值,在sfism4.r_wip_tracking_t   表中查出它的group_name   分布. 
表單     sfism4.r_wip_tracking_t   中存在如下字段: 
SERIAL_NUMBER   LINE_NAME           GROUP_NAME           MODEL_NAME           IN_STATION_TIME                 KEY_PART_NO       
2078864103488   2PCBB                         MB                         IBL30LA5             2007/8/1                               46145932L05   
2079282800891   2PCBF                         MB                         IBL80                 L04   2007/8/1                           46148632L04   
2079201201854   2PCBI                         F/T                       IAT60                 L22   2007/8/1                         46147932L22   
我用     select   group_name     ,count(serial_number)   from   sfism4.r_wip_tracking_t   where   serial_number 
in   ('','','',)     gruop   by   group_name       
此中因公司只可用PLSQLDEV 工具  來操作DB   ,而對此工具,它存在用IN(‘’)語句時查詢紀綠不能超過1000條的限制, 
請問:我用何種方法可避開此限制,一次性顯示這10000個SERIAL_NUMBER的GROUP_NAME分布, 
 望高手相助,完成本人第一枝程式。 急,我今天在線等,,下周就要上產線用了,,兄弟們幫下忙

解决方案 »

  1.   

    你的表我看的不太明白,我想你的serial_number应该是有规律的,所以你可能用between and 来试一下,当然可以借助其它函数。
      

  2.   

    我的serial_number 來自客戶提供,無規則,是放在一個EXCEL文件中,,我將它導入DELPHI的
      

  3.   

    我不要分页,只要全部顯示就好,,顯示控件最好為DBGRID/LISTVIEW
      

  4.   

    Group by?
    导入到ListView,然后Sort一下。
      

  5.   

    TMS套件当中有一个TAdvStringGrid.调一个Group(ColumnIndex);方法就OK。
      

  6.   

      Group   by? 
    导入到ListView,然后Sort一下。?????
    請問unsigned  :Sort一下是什么東西?
    還有請問大虫們:
    你們沒使用過PLSQLDEV  操作ORACLE DB不,其select * from table  where 字段 in('')  group by  group_name   
    這個IN 的數量為1000限制,
    我現在查10000個不規則的SERIAL_NMUMBER,的group_name分布如何實現。
      

  7.   

    另外,我不是太明白,你这里面的group by的用法,或者是不是order by可以完成。
      

  8.   

    select   *   from   table     where   字段   in('')     group   by     group_name       
    這個IN   的數量為1000限制, 
    我的需求只是查出它的簡單的組別分布情況,order by 就沒有必要了,,
    因為是 導入的數據,所以一次性我無法查出,,
    而我想通過DELPHI語言或者SQL語句來實現
    ,,請問unsigned:
    join取代in 是不是無限制呢,,
    我用UNION方法,因無法確定變量個數,所以不能實現。因為給我的SERIAL_NUMBER可能很大,分為1000個、數賦一個變量有點不現實。
      

  9.   

    其实在SQLDEV里只能显示1000条数据。
    但导到Delphi里的话,用
    While Not qu.eof do
    begin
      //取值
      qu.next;//这样是没有1000条限制的。
    end;你的Shop floor 系统可能设计的有些问题。
    -----------------------                          [email protected]
       
      

  10.   

    我不清楚oracle的虚拟表怎么用,但是在这种情况下,完全可以使用临时表不是么?
      

  11.   


    While   Not   qu.eof   do 
    begin 
        //取值 
        qu.next;//这样是没有1000条限制的。 
    end; 你的Shop   floor   系统可能设计的有些问题。 
    dear   maming2003:
    能否用一個小示例來示范下,,,,我有點不解 
    While   Not   qu.eof   do   這個QU,,是不是查詢的結果已限制在1000條之內了,,,因我的SERIAL_NUMBER
    為不規則的。????
      
      

  12.   

    如果用临时表的话
    10000多条记录,统计时间要1分钟左右了,不会太长么??
    如果是高端点的CPU的话还可以
      

  13.   

    SERIAL_NUMBER列的数值是唯一的么?
    如果SERIAL_NUMBER不是索引列,那你这张表有索引列么??
      

  14.   

    用了个很简单的办法,你看下能解决不
    你首先建一张表JJ
    JJ表有两列,分别是 GROUP_NAME 和 数量 利用指针的方法实现的;
    记录第一条记录和第1000记录的索引值,然后每1000条记录统计一次,最后再汇总,这样就实现了注意:
    SERIAL_NUMBER必须是唯一的值,不然数据有可能会错!
    如果SERIAL_NUMBER不是唯一的值,那就用你那张表的索引列来替换掉下面代码里面的SERIAL_NUMBER列,这样就OK了!'解决了记得送分哦! ^_^procedure TForm1.SpeedButton1Click(Sender: TObject);
    var i,j:integer;
    var k1,k2:integer;
    begin
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('delete JJ');
    adoquery1.ExecSQL;adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('select * from sfism4.r_wip_tracking_t order by SERIAL_NUMBER');
    adoquery1.Open;
    for j:=0 to (adoquery1.RecordCount div 1000) do
    begin
    k1:=adoquery1.Fields[0].AsInteger;for i:=0 to 998 do
    begin
    if j=adoquery1.RecordCount div 1000 then
    begin
    adoquery1.Last;
    break;
    end;
    adoquery1.Next;
    end;
    k2:=adoquery1.Fields[0].AsInteger;
    adoquery2.Close;
    adoquery2.SQL.Clear;
    adoquery2.SQL.Add('insert into JJ(GROUP_NAME,数量) select GROUP_NAME,count(SERIAL_NUMBER) as 数量 from'); 
    adoquery2.sql.add('sfism4.r_wip_tracking_t where SERIAL_NUMBER between :A and :B  group by GROUP_NAME');
    adoquery2.Parameters.ParamByName('A').Value:=k1;
    adoquery2.Parameters.ParamByName('B').Value:=k2;
    adoquery2.ExecSQL;
    adoquery1.Next;
    end;adoquery2.Close;
    adoquery2.SQL.Clear;
    adoquery2.SQL.Add('select GROUP_NAME,sum(数量) as 数量 from JJ group by GROUP_NAME');
    adoquery2.Open;
    end;
      

  15.   

    DBGrid绑定的是Adoquery2的数据集....别搞错了!!!!!
      

  16.   

    一个in不能超过一千条,那你就可以拆分成多个in撒.
    比如 in (1,2,....1000) or in (1001,1002,....2000) or in (2001,2002,...3000)....
      

  17.   

    對大家的熱心相助,我很感動。
    我自己實現了它的查詢,
    現在出現一個新的問題, 
    我用IN   語句對10000條SERIAL_NUMBER分10部份進行查詢,並分10次賦值到LISTVIEW控件中,而現在我想將相同GROUP_NAME進行漚總。就如EXCEL   的篩遷功能一樣。 
    我再一次申明因我們公司的部門劃分不一樣,加臨時表的方法是最後的方法,我一般不想使用。因為這涉及到部門會議,以及各種其它方面情況。 
    dear  XavierDelphi   :
    非常感謝你能供SOURCE  CODE
    我會為你加分的。
    不知你能否為我指明用何控件可實現動態賦值,以及篩遷功能
      

  18.   

    你想汇总些什么信息Data Control选项卡上的控件有些就能达到实时修改数据
    ADOTable,ADOQuery这类控件有个Filter属性是用于过滤数据集的,有相当与SQL的Where的作用,灵活运用应该可以解决你的问题