要显示一个表(核算表)。从 配件表 中读取数据,配件表的
主要字段有:组件,单价,配件合计,合计,含税成本,FTYPE
(FTYPE 为组件的类型,包含A,B,等数据)
要求:
 1)当“组件”是 “A”或“B”时,单价显示0.000
 2)当“组件”是 其他情况 时,单价显示为配件的具体价格
 而且把“配件合计”的值置为 0.000
 例如:(显示情况)   组件    单价   配件合计    合计    含税成本
    A      0.000   100.00     100.00   100.00
    B      0.000   50.00       50.00    50.00
    .............................................
    e      1.0      0.000      1.00       1.00
    f      30.00    0.000      30.00       30.00哪位好心的大哥帮帮我了

解决方案 »

  1.   

    select  a.组件, 
            单价=case a.组件
              when 'A' Then 0.000
              when 'B' Then 0.000
              Else a.单价
            End,  
            配件合计=case a.组件
              when 'A' Then a.配件合计
              when 'B' Then a.配件合计 
              Else 0.000  
            End,
            a.合计,   
            a.含税成本
    from 配件表 a
      

  2.   

    taoff(阿飞) :能不能具体点,我想写在QUERY中啊,
    最好是一条SQL语句。。
      

  3.   

    先执行sql:insert into 核算表
      select 组件, 0.0000, 配件合计, 合计, 含税成本
        from 配件表 u
       where u.组件 = 'a' or u.组件 = 'b';insert into 核算表
      select 组件, 单价, 0.0000, 合计, 含税成本
        from 配件表 u
       where u.组件 <> 'a' and u.组件 <> 'b';然后:
    select * from 核算表
      

  4.   

    coolvc2002(cool_vc) :
     我要做的是显示数据,而不是插入数据啊
     我是要在DBGRID 中显示的啊
      

  5.   

    上面我给的sql效率是最高的,如果非要在一个语句中写出来,那如果是oracle的话,可以这样写(SQLServer 可以替换掉decode 函数,如果是Access 的话,那我也没招了哦^_^):select 组件,
           decode(组件, 'a', 0.0000, 'b', 0.0000, u.单价) as 单价,
           decode(组件, 'a', 0.0000, 'b', 0.0000, u.配件合计) as 配件合计,
           合计,
           含税成本
      from 配件表 u
     where u.组件 = 'a' or u.组件 = 'b';
      

  6.   

    TADquery1.close;
    TADquery1.SQL.clear;
    TADquery1.sql.add('select  a.组件,'+
               ' 单价=case a.组件'+
               '  when ''A'' Then 0.000'+
               ' when ''B'' Then 0.000'+
               ' Else a.单价'+
               ' End,'+
               ' 配件合计=case a.组件'+
               ' when ''A'' Then a.配件合计'+
               '  when ''B'' Then a.配件合计' +
               '  Else 0.000 '+ 
               ' End,a.合计,   a.含税成本 from 配件表 a');
    Tadoquery1.Open;
      

  7.   

    coolvc2002(cool_vc) :
     我要做的是显示数据,而不是插入数据啊
     我是要在DBGRID 中显示的啊----------------------------------------------------晕~~~,你可以在显示之前,调用那个插入的sql,
    insert into 核算表
      select 组件, 0.0000, 配件合计, 合计, 含税成本
        from 配件表 u
       where u.组件 = 'a' or u.组件 = 'b';insert into 核算表
      select 组件, 单价, 0.0000, 合计, 含税成本
        from 配件表 u
       where u.组件 <> 'a' and u.组件 <> 'b';
    然后显示时,直接从:核算表 中取数据呀!
      

  8.   

    我不需要做插入啊,
    我也没有核算表,我只是从“配件表”中获得数据,
    加工之后,显示出来的,
    我用的是ADOQUERY,
    那么怎么写他的SQL
      

  9.   

    楼上的:case 
      when ...;
      else ...;
    end效率低,又不是标准的SQL语言,不提倡使用!用:select 组件,
           decode(组件, 'a', 0.0000, 'b', 0.0000, u.单价) as 单价,
           decode(组件, 'a', 0.0000, 'b', 0.0000, u.配件合计) as 配件合计,
           合计,
           含税成本
      from 配件表 u
     where u.组件 = 'a' or u.组件 = 'b'
      

  10.   

    TADquery1.close;
    TADquery1.SQL.Text := 'select 组件,' + #13#10 +
    '       decode(组件, ''a'', 0.0000, ''b'', 0.0000, u.单价) as 单价,' + #13#10 +
    '       decode(组件, ''a'', 0.0000, ''b'', 0.0000, u.配件合计) as 配件合计,' + #13#10 +
    '       合计,' + #13#10 +
    '       含税成本' + #13#10 +
    '  from 配件表 u' + #13#10 +
    ' where u.组件 = ''a'' or u.组件 = ''b''';
    Tadoquery1.Open;
      

  11.   

    你数据库表里是什么就select出来什么了,怎么还要分情况阿,要是这样还要数据库干什么
      

  12.   

    decode 好象不能用在SQLSERVER
      

  13.   

    query 中的afteropen :
       IF dataset.FieldByName('ftype').Value = 'a' then
       begin
      dataset.FieldByName('fpprice').Value:= 0.000;
       end;
       IF dataset.FieldByName('ftype').Value = 'b' then
       begin
      dataset.FieldByName('fpprice').Value:= 0.000;