查询结果Query1:
结构:ProdName, Qty, Je
        产品一   25  36
        产品二   80  250
查询结果Query2:
结构: ProdName  Size Qty
        产品一    M   10
        产品一    S   15
        产品二    M   30
        产品二    S   50
我建了一个表,如何根据上面两个查询结果中的PRODNAME,生成下面的结果,我只想用DELPHI语句写。
结构:ProdName  QtyTotal  Je    M    S   
        产品一     25     36    10   15
        产品二     80     250   30   50

解决方案 »

  1.   

    delphi那里有sql语句,delphi只能操作查询结果的数据集,我看你的意思是想做一个通用的语句来适合所有的数据库,的确麻烦一点.这个结果用sqlserver的case when或者oralce的decode语句很容易实现,而用标准的sql语句似乎不行.你可以在delphi中做个函数或者数据库存储过程,返回这样的结果集.函数或过程可以根据不同的数据库来指定,就是把实现过程做个封装,移植的时候不用牵扯到其他模块
      

  2.   

    create table tb1 (
               ProdName   char (20)  null,
              Qty  int null,
               Je   int null
    )
    insert into tb1
    select '产品一' ,  25,  36
    union
    select '产品二' ,  80,  250create table tb2 (
               ProdName   char (20)  null,
              [Size] char(10)  null,
               Qty   int null
    )
    insert into tb2
    select  '产品一',   'M',   10
    union
    select  '产品一',    'S',   15
    union
    select   '产品二',   'M',   30
    union
    select   '产品二',   'S' ,  50查询
    select  a.ProdName, a.Qty as QtyTotal, a.je,  
    (select Qty  from tb2 where ProdName = a.ProdName and [size] = 'M' ) as M,
    (select Qty  from tb2 where ProdName = a.ProdName and [size] = 'S' ) as S
    from tb1 as a查询结果:
        产品一                25 36 10 15
        产品二                80 250 30 50
    delphi  程序
    var
      sql: String;
    sql := 'select  a.ProdName, a.Qty as QtyTotal, a.je,  
    (select Qty  from tb2 where ProdName = a.ProdName and [size] = 'M' ) as M,
    (select Qty  from tb2 where ProdName = a.ProdName and [size] = 'S' ) as S
    from tb1 as a'ADOQuery1.close;
    ADOQuery1.sql.clear;
    ADOQuery1.sql.add(sql);
    ADOQuery1.open;
      

  3.   

    假设Query1查询TABLE1,Query2查询TABLE2
    可以用如下代码,SQL Server 2000测试通过Select T1.ProdName as ProdName, T1.Qty as QtyTotal, T1.Je as Je, T2.Qty as M, T3.Qty as S
    from TABLE1 T1 join TABLE2 T2 on T1.ProdName = T2.ProdName join TABLE2 T3 on T2.ProdName = T3.ProdName and T2.Size < T3.Size
      

  4.   

    如果,我在Sql后面写储贮过程,使用到临时表,如果并发使用,会不会冲突啊。
      

  5.   

    学习
    up
    meiqingsong(阿飛) 的不错了
      

  6.   

    如果,我在Sql后面写储贮过程,使用到临时表,如果并发使用,会不会冲突啊。
    --不用临时表,一条sql就搞定,你是什么数据库?
      

  7.   

    create procedure 存储过程名
    as
    declare @sql varchar(3000)
    begin
    set @sql=''
    set @sql='select a.*,b.M,b.S from query1 a' 
    set @sql=@sql+',(select prodname'
    select @sql=@sql+',sum(case size when '''+size+''' then qty else 0 end)['+size+']'
    from (select distinct size from query2)a
    select @sql=@sql+' from query2 group by prodname)b'
    set @sql=@sql+' where a.prodname=b.prodname order by a.prodname desc'
    exec(@sql)
    end
    产品一 25 36 10 15
    产品二 80 250 30 50
    搞定,
      

  8.   

    create procedure 存储过程名
    as
    declare @sql varchar(3000)
    begin
    set @sql=''
    set @sql='select a.*,b.M,b.S from query1 a' 
    set @sql=@sql+',(select prodname'
    select @sql=@sql+',sum(case size when '''+size+''' then qty else 0 end)['+size+']'
    from (select distinct size from query2)a
    select @sql=@sql+' from query2 group by prodname)b'
    set @sql=@sql+' where a.prodname=b.prodname order by a.prodname desc'
    exec(@sql)
    end       ProdName  QtyTotal  Je    M    S   
            产品一     25     36    10   15
            产品二     80     250   30   50搞定,支持动态,
      

  9.   

    最好不要在这个时候用临时表,这样并发会出现问题的。采用我的动态连接sql存储过程,就能实现。procedure tform1.button1click(sender:Tobject);
    begin
       adoprocedure1.open;    打开就行了或用 adoprocedure1.exec;
    end;