where mc='a' or mc='bm'

解决方案 »

  1.   

    to newyj: 
     What's means?
      

  2.   

    insert into t_2(bm,a)
                select t_1.bm,t_1.value  from t_1,t_2
                  where t_1.mc='a' 
      

  3.   

    直接用字段名当然可以了!你肯定是少加'号了,
    wanwangzhiwang
    这样的就可以了呀
    where t_1.mc = 'a' ort_1.mc = 'bm'
      

  4.   

    to pure_cmh:
      字段不能确定,怎麽办??
      

  5.   

    你的后台数据库是什么?
    如果是ORACLE搞定!
      

  6.   

    TO pure_cmh:
    很不巧,是SQL ANYWHERE
      

  7.   

    SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'T_1';这个视图里还有很多其他字段,WHERE语句自己搞定吧!得到的是字符串,把他们放到一个STRINGLIST里,然后再写你原来那个SQL语句
      

  8.   

    TO Pure_cmh:
      SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'T_1'这个语句是什麽意思?
      我试了,语法错误!
      

  9.   

    all_tab_columns是oracle给出的视图!不知道sql anywhere 里有没有类似的视图,
      

  10.   

    我在sql anywhere 的系统表中可以列出t_1的所有字段,
    select cname from syscolumns where tname='t_1'现在的问题是:怎样把字段名称放在字符串中或者放在数组中??
      

  11.   

    那可以了呀,
    for index := 0 to query1.RecordCount - 1 do
      list1.Add(FieldByName('cname').AsString);
      

  12.   

       试一下:
          insert into t_2(bm,a)
             select bm,value  from t_1 
                  where t_1.mc in (select cname from syscolumns where tname='t_2')
       不知道能不能行,呵呵。
      

  13.   

    list1 是字符串吗?那 t_2中的字段名=t_1中mc字段的值 中的字段名该怎样写?
      

  14.   

    to tangliang813:
      那样不成,因为字段要一一对应,必须确定字段名称
      

  15.   

    你所谓的一一对应指什么?
    tangliang813的方法效率不错呀!我那种反而不太好:)
      

  16.   

    问mrs,
       你的select cname from syscolumns where tname='t_1'中列出的值是什么?
      

  17.   

    字段名好像不能传参,
    可以这样运行时加载:
       tquery.sql.add('insert into t_2(bm,a) select t_1.bm,t_1.value  from t_1 '+
                       format('where t_1.mc=%s',[t_2中的字段名]));
      

  18.   

    TO tangliang813:
      select cname from syscolumns where tname='t_1' 列出的是t_1中的所有字段,刚才书写错误,应该是 t_2to all:
     我已经说过: t_2 中的字段名是不确定的,而且字段的个数也不确定,所以应该是
                insert into t_2(bm,字段1,字段2,字段3....)
                为了简单,用insert into t_2(bm,字段名),然后用union 连接 
                所以必须确定字段名称才能操作, 
                insert into t_2(bm,字段名称)
                 select bm,value from t_1 t1,t_2 t2 
                   where t1.mc=t2.字段名 
              现在的关键问题是:字段名怎样表示???
      

  19.   

    你其实就是想在SQL中做交叉表是吧
      

  20.   

    to zy61:
    对对对,没错!!!
      

  21.   

    SQL Server没有完成交叉表的功能,但对于某个具体的问题可以用存储过程实现。
      

  22.   

    to pure_cmh(不死鸟):
    我举一个例子:
    在一个客户服务系统中有一张维护记录表表如下
    t1 : (维护员,维护时间,客户,...);
    表中有如下内容    张三,2001-05-28,'skljflk',....
        李四,2001-05-28,'skljflk',....
        王五,2001-05-27,'sfgsdgfsafas',...
        ...
    生成统计表t2统计每人每天维护次数
    t2 :
                 张三,李四,王五...
    2001-05-27    0     0      1
    2001-05-28    1     1      0
    ...
      

  23.   

    to zy61:
      如果交叉的两相都不确定,有实现的办法吗?
      

  24.   

    to zy61:
       若时间和人数都不确定,怎麽办?
      

  25.   

    反正你不可以简简单单就select了事,要重新再create这张表的!
      

  26.   

    To pure_cmh(不死鸟):
    还是在论坛上说吧
      

  27.   

    或者你可以用浪费磁盘的方法来实现呀!好比,建一个相对较大的表,不会字段不够不过,我不太明白t2表存在的意义,相应的那种查询效果,可以用复杂点的query语句得到,有必要把他存下来嘛?
      

  28.   

    to all:
      大家有什麽好主意吗?快拿出来吧!
    to zy61,pure_cmh:
      两位大哥,怎麽不说话!?
      

  29.   

    我用下面这个存储过程实现上面的例子,请大家指教
    CREATE PROCEDURE [daily_proc] @rq1 datetime, @rq2 datetime AS
    declare @command varchar(2000)
    declare @fieldname varchar(100)
    declare @ID char(5)--set @rq1 = '2001-03-01'
    --set @rq2 = '2001-03-31'set @rq1 = convert(datetime,convert(char(8),@rq1,112))
    set @rq2 = convert(datetime,convert(char(8),@rq2,112))--select @rq1,@rq2 select cs = count(jlbh),whrq = convert(datetime ,convert(char(8), whrq),112),whybh into #t1 from daily 
    where convert(datetime ,convert(char(8), whrq),112) between @rq1 and @rq2 + 1
    group by whrq,whybhselect distinct 日期 = whrq  into #t2 from #t1 declare c1 cursor LOCAL for select distinct whybh,e.ygxm from #t1,employee e where #t1.whybh = e.ygbhOPEN c1FETCH Next From c1 into  @ID , @fieldnameWHILE @@FETCH_STATUS = 0BEGIN    -- This is executed as long as the previous fetch succeeds.    set @command = 'Alter table #t2 add [' + @fieldname + '] int'    Exec(@command)    set @command = 'Update #t2 set ['+ @fieldname + '] = 0 '    Exec(@command)    set @command = 'Update #t2 set ['+ @fieldname + '] = #t1.cs from #t1,#t2 where #t1.whybh = ''' + @id + ''' and #t2.[日期] = #t1.whrq'    Exec(@command)    FETCH NEXT FROM c1 into @ID , @fieldName
    ENDCLOSE c1DEALLOCATE c1drop table #t1select * from #t2drop table #t2To pure_cmh(不死鸟)  :
    我用单纯的Select语句无法实现 
      

  30.   

    jlbh 是记录编号
    whrq 是维护日期
    whybh 是维护员编号
    whrq是个整型,所以要转换
      

  31.   

    to pure_cmh:
       为什麽?没有t2怎麽统计?
      

  32.   

    统计的值你不就是要在一定查询条件下显示一下,出张报表吗?那查询时、打报表的时候进行统计,不是更方便?要不然,总是create表,效率并不高