生产一批包,有黑、棕、米色等。用到的材料有的相同的,只是颜色不同。有没有办法实现输入它们共用的材料(只输一次,这时颜色不输入),提交到生产从表中的数据变成对应包的颜色的多条材料信息!比如:生产背包:黑色,棕色,米色三种,各500个,三种包都要用到的材料塔丝龙。
生产主表:
scno             name   num1  color1   num2   color2      num3     color 3
sc200307270001   背包   500   黑色     500    棕色        500      米色
输入塔丝龙的信息(没有颜色),只输入一次提交,在从表:
scno             name              
sc200307270001   塔丝龙     
如何得到以下的表:用SQL语句
scno             name        num       color  
sc200307270001   塔丝龙      500       黑色
sc200307270001   塔丝龙      500       棕色
sc200307270001   塔丝龙      500       米色恳请各位大虾指教,如果每种颜色一张单子,太浪费纸了,客户接受不了。

解决方案 »

  1.   

    TempB:=gettablename;      //创建临时表
      CreateAdo.Close;
      CreateAdo.SQL.Clear;
      CreateAdo.SQL.Add('create table ' + TempB + '(Fname varchar(200), Fdatetime char(30),Maxneed float(8),Fdatetime1 char(30),Maxneed1 float(8),Fdatetime2 char(30),Maxneed2 float(8),Fdatetime3 char(30),Maxneed3 float(8))');
      CreateAdo.ExecSQL;  Aresult.Close;
      Aresult.SQL.Clear;
      Aresult.SQL.Add('select Fdatetime,Maxneed,Fdatetime1,Maxneed1,Fdatetime2,Maxneed2,Fdatetime3,Maxneed3,Fname from '+ TempB);
      Aresult.Open;
      for j:=1 to Tcount do      //i-1
      begin
        Aresult.Append;
        Aresult.FieldByName('Fname').AsString:=Fn[j];
        Aresult.FieldByName('Fdatetime').AsString:=Maxtime[j]; 
        Aresult.FieldByName('Maxneed').AsFloat:=MaxT[j];
        Aresult.FieldByName('Fdatetime1').AsString:=Maxtime1[j]; 
        Aresult.FieldByName('Maxneed1').AsFloat:=MaxT1[j];
        Aresult.FieldByName('Fdatetime2').AsString:=Maxtime2[j]; 
        Aresult.FieldByName('Maxneed2').AsFloat:=MaxT2[j];
        Aresult.FieldByName('Fdatetime3').AsString:=Maxtime3[j]; 
        Aresult.FieldByName('Maxneed3').AsFloat:=MaxT3[j];
      end;
      Aresult.Post;  Aresult.Close;
      Aresult.Open;  CreateAdo.Close;        //删除临时表
      CreateAdo.SQL.Clear;
      CreateAdo.SQL.Add('drop table ' + TempB);
      CreateAdo.ExecSQL;自己参考修改
      

  2.   

    我用一个字段type来标志了。0的时候不是共用的材料,1的时候是共用的材料
      

  3.   

    如果主表:
    scno             name   num  color   
    sc200307270001   背包   500   黑色 
    sc200307270001   背包   500   棕色
    sc200307270001   背包   500   米色
    从表:
    scno             name           type  
    sc200307270001   塔丝龙          1
    sc200307270001   黑色织边        0
    sc200307250001   么贴术          0
    如何得到:
    scno             name        num       color  
    sc200307270001   塔丝龙      500       黑色
    sc200307270001   塔丝龙      500       棕色
    sc200307270001   塔丝龙      500       米色
    sc200307270001   黑色织边    1500       
    sc200307250001   么贴术      1500   
    大虾们救命~~~
      

  4.   

    用 ROLLUP 汇总数据
    在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。有关更多信息,请参见用 CUBE 汇总数据。 CUBE 和 ROLLUP 之间的区别在于: CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
    ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。 
    例如,简单表 Inventory 中包含:Item                 Color                Quantity                   
    -------------------- -------------------- -------------------------- 
    Table                Blue                 124                        
    Table                Red                  223                        
    Chair                Blue                 101                        
    Chair                Red                  210                        下列查询将生成小计报表:SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
                ELSE ISNULL(Item, 'UNKNOWN')
           END AS Item,
           CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
                ELSE ISNULL(Color, 'UNKNOWN')
           END AS Color,
           SUM(Quantity) AS QtySum
    FROM Inventory
    GROUP BY Item, Color WITH ROLLUPItem                 Color                QtySum                     
    -------------------- -------------------- -------------------------- 
    Chair                Blue                 101.00                     
    Chair                Red                  210.00                     
    Chair                ALL                  311.00                     
    Table                Blue                 124.00                     
    Table                Red                  223.00                     
    Table                ALL                  347.00                     
    ALL                  ALL                  658.00                     (7 row(s) affected)如果查询中的 ROLLUP 关键字更改为 CUBE,那么 CUBE 结果集与上述结果相同,只是在结果集的末尾还会返回下列两行:ALL                  Blue                 225.00                     
    ALL                  Red                  433.00                     CUBE 操作为 Item 和 Color 中值的可能组合生成行。例如,CUBE 不仅报告与 Item 值 Chair 相组合的 Color 值的所有可能组合(Red、Blue 和 Red + Blue),而且报告与 Color 值 Red 相组合的 Item 值的所有可能组合(Chair、Table 和 Chair + Table)。对于 GROUP BY 子句中右边的列中的每个值,ROLLUP 操作并不报告左边一列(或左边各列)中值的所有可能组合。例如,ROLLUP 并不对每个 Color 值报告 Item 值的所有可能组合。ROLLUP 操作的结果集具有类似于 COMPUTE BY 所返回结果集的功能;然而,ROLLUP 具有下列优点: ROLLUP 返回单个结果集;COMPUTE BY 返回多个结果集,而多个结果集会增加应用程序代码的复杂性。
    ROLLUP 可以在服务器游标中使用;COMPUTE BY 不可以。
    有时,查询优化器为 ROLLUP 生成的执行计划比为 COMPUTE BY 生成的更为高效。 请参见SELECT用 COMPUTE 和 COMPUTE BY 汇总数据©1988-2000 Microsoft Corporation。保留所有权利。
      

  5.   

    用联合查询:SELECT 主表.scno AS 编号, name as 材料 ,COLOR1 as 颜色, NUM1 as 数量
     FROM 主表,从表 where 主表.id =从表.id union 
     SELECT main.scno, name ,COLOR2, NUM2
     FROM 主表,从表 where 主表.scno =从表.scno UNION SELECT 主表.scno, name ,COLOR3, NUM3
     FROM 主表,从表 where 主表.scno =从表.scno;
      

  6.   

    我也只是向导临时表的做法,以前做过类似的,记的有简便的方法了,实在想不出来了
    先就这个自己看看,应该可以解决的
    --将课程名称做为字段名显示出来
    select userid,kcbh 语文 into a1 from a where kcbh='a';
    select userid,kcbh 数学 into a2 from a where kcbh='b';
    select userid,kcbh 英语 into a3 from a where kcbh='c';
    select userid,kcbh 常识 into a4 from a where kcbh='d';select a.userid 学号,语文,数学,英语,常识
    into #ddd
    from a , a1, a2, a3, a4
    where a.userid = a1.userid and a1.userid= a2.userid and a2.userid= a3.userid
    and a3.userid=a4.useridselect * from #ddd;