DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: pixelcraft
今日帖子: 55
在线用户: 18
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 Another (Another) ★☆☆☆☆ -
盒子活跃会员
2003/5/21 10:00:03
标题:
怎样去除冗余数据?? 浏览:3163
加入我的收藏
楼主: ID Name
---------
1  a
1  a
1  a
2  b
2  b
3  c
3  c
===========
有一破表如上所示:
求解:
  怎样运算能只剩下一个唯一的ID;
现在是亡羊补牢呀?
粗心的人居然没有设置主键?
所以求解?
在线等待。。。
----------------------------------------------
按此在新窗口浏览图片
作者:
女 123 (猪猪) ★☆☆☆☆ -
盒子活跃会员
2003/5/21 10:13:47
1楼: select * into newtable from thistable group by ID
----------------------------------------------
-
作者:
男 Another (Another) ★☆☆☆☆ -
盒子活跃会员
2003/5/21 10:30:11
2楼: 不对呀?
己经试过了?
出错如下:

  列 “Table.Name" 不是有效列表
即不包含在聚合函数中,也不包含在Group By子句中
----------------------------------------------
按此在新窗口浏览图片
作者:
女 123 (猪猪) ★☆☆☆☆ -
盒子活跃会员
2003/5/21 10:35:38
3楼: 还有个方法,定义一个变量保存当前的ID,如果一样就跳过,不一样就保留,然后变量=ID这样子。
----------------------------------------------
-
作者:
女 123 (猪猪) ★☆☆☆☆ -
盒子活跃会员
2003/5/21 10:35:59
4楼: 噢,上面这个方法必须按ID排序。
----------------------------------------------
-
作者:
男 Another (Another) ★☆☆☆☆ -
盒子活跃会员
2003/5/21 10:38:50
5楼: 具体一点的
SQL语句
而且
像这样的表有100个左右
我能用什么简单的办法
把整个库里的表都清一下
要不然
这个系统就完了??
所以很急
----------------------------------------------
按此在新窗口浏览图片
作者:
女 error (qimu80) ★☆☆☆☆ -
普通会员
2003/5/21 13:55:39
6楼: 你看一下,这样可以么!
SELECT DISTINCT 列名
FROM 表格1 INNER JOIN 表格2


----------------------------------------------
发现错误是我的爱好!
作者:
男 Another (Another) ★☆☆☆☆ -
盒子活跃会员
2003/5/21 14:49:01
7楼: 内连接??
这行不通呀!
再具体一点。。
----------------------------------------------
按此在新窗口浏览图片
作者:
男 Another (Another) ★☆☆☆☆ -
盒子活跃会员
2003/5/21 15:11:24
8楼: 单个表的问题己经解决:
Select distince * into #temp From table
Drop table
Select * into table from #Temp

可有一百左右个表呢?
难道要一个一个的来吗?
----------------------------------------------
按此在新窗口浏览图片
作者:
男 Another (Another) ★☆☆☆☆ -
盒子活跃会员
2003/5/23 9:42:51
10楼: 单个表的问题也出错了
Dintict不能对Text,和 Image操作
所以8楼写的办法不算完全正确
----------------------------------------------
按此在新窗口浏览图片
作者:
女 ldyocean (ldyocean) ★☆☆☆☆ -
盒子活跃会员
2003/5/23 15:55:23
11楼: group by不行吗?

var 
   msql:string;
   msql1:string;
   mlist:tstringlist;
   i,j:integer;
begin
   mlist:=tstringlist.create;
   adoconnection.gettablenames(mlist,false);//遍历库中所有的表传入mlist
   for i:=0 to mlist.count-1 do begin
       table1.close;
       table1.tablename:=mlist.strings[i];            
       table1.open;                  //打开此表以取得字段名
       msql:='select ';
       msql1:=' group by '
       for j:=0 to table1.recordcount-1 do begin
           msql:=msql+'max('+table1.fields[j].name+'),';
           msql1:=msql1+table1.fileds[j].name+',';
       end;
       //循环写sql语句
       msql:=msql+' into '+新表名+' from '+mlist.strings[i]+msql1;
       with query_temp do begin
            close;
            sql.clear;
            sql.add(msql);
            execsql;             //望新表里加
       end;
   end;
   mlist.free;
   mlist:=nil;
end;

    以上代码全部属于臆测,呵呵,没有试过,要是不行别怪我浪费你的时间啊。:)
    另,其实应该另外用一个stringlist来记录新表名的,和旧表名一一对应,不过因为我不知道命名规则就没写。
----------------------------------------------
-
作者:
女 yjcheng (sunny) ★☆☆☆☆ -
盒子活跃会员
2003/5/25 20:54:37
12楼: select distinct id,name from OldTableName into temp temp1;
这样暂存表temp1中存放的就是唯一的ID,NAME
----------------------------------------------
-
作者:
男 avman ★☆☆☆☆ -
普通会员
2003/5/25 22:44:24
13楼: SQL.Add('delete from tela where id not in (select max(id) from tela group by callnum,stdate,startt)')

----------------------------------------------
我从迷茫中走来,希望能清晰地离去
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行101.5625毫秒 RSS