34,590
社区成员
发帖
与我相关
我的任务
分享
name Item value tag
John ITCH 89.33 1
John ITCH 33.22 2
Alex ITCH 67.77 3
Jacky ITCH 89.01 1
Alex YHTC 34.22 2
Bruce YHTC 35.11 2
Bruce YHTC 89.11 3
...
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
go
CREATE TABLE [tb] (name VARCHAR(5),Item VARCHAR(4),value NUMERIC(4,2),tag INT)
INSERT INTO [tb]
SELECT 'John','ITCH',89.33,1 UNION ALL
SELECT 'John','ITCH',33.22,2 UNION ALL
SELECT 'Alex','ITCH',67.77,3 UNION ALL
SELECT 'Jacky','ITCH',89.01,1 UNION ALL
SELECT 'Alex','YHTC',34.22,2 UNION ALL
SELECT 'Bruce','YHTC',35.11,2 UNION ALL
SELECT 'Bruce','YHTC',89.11,3
go
select *
from tb a
where tag =(select min(tag) from tb where name=a.name and Item = a.Item )
name Item value tag
----- ---- --------------------------------------- -----------
Alex ITCH 67.77 3
Alex YHTC 34.22 2
Bruce YHTC 35.11 2
Jacky ITCH 89.01 1
John ITCH 89.33 1
(5 行受影响)
打开包含重复记录的数据库。
在“数据库”窗口中的“对象”下,单击“查询”,然后单击“数据库”窗口工具栏上的“新建”。
在“新建查询”对话框中,单击“查找重复项查询向导”,然后单击“确定”。
这可能是因为 Access 正运行于沙盒模式,但您的计算机上尚未安装 Microsoft Jet 4.0 SP8 或更高版本。启用沙盒模式后,必须安装有 Jet 4.0 SP8 或更高版本,Access 才能完全发挥作用。
有关安装 Jet 升级的详细信息,请参阅 Office Online 文章关于 Microsoft Jet 4.0 SP8 或更高版本。
有关沙盒模式的详细信息,请参阅 Office Online 文章关于 Microsoft Jet Expression Service 沙盒模式。
在该向导中的表列表中,选择包含重复记录的表,然后单击“下一步”。
从可用字段列表中,选择包含重复信息的字段,例如,如果您想比较以不同方式书写的街道地址以查找重复记录,请选择“城市”字段。然后单击“下一步”。
从可用字段列表中,针对要在重复记录中检查的数据选择字段,例如“地址”字段。然后单击“下一步”。
输入查询的名称,例如“针对客户查找重复项”,然后单击“完成”以运行查询。
运行查询时,包含重复字段的记录(在本例中,就是同一城市的所有记录)按照该重复字段(“城市”)排序,这样就可以比较要检查的任何其他字段(例如“地址”)中的数据。在本例中,重复记录的“地址”字段包含不同的数据(例如 "崇外大街" 和 "崇德门外大街")。
如果您的数据库只包含少量的重复记录,可以选择不需要的个别记录并将其删除。当您删除“地址”字段中不使用缩写的重复记录之后,记录将按如下方式显示。
但是,您不能为了删除重复记录而将“查找重复项”查询转换为删除查询。这是由于“查找重复项”查询返回的是原始记录和该记录的所有副本,方便您选择要删除的版本。因此,如果将“查找重复项”查询转换为删除查询,将会同时删除原始记录和重复记录。但是,如果您不需要选择待删除的版本,则有一种既可以保留原始记录、又能自动删除重复记录的方法。
自动删除重复记录并保留原始记录
从表中删除重复记录需要两个步骤。第一步,复制包含重复记录的表的结构,生成包含重复记录的所有字段的主键。第二步,创建并运行从原始表到新表的追加查询。由于主键字段不能包含重复记录,因此这一过程将生成不含重复记录的表。
复制该表并使包含重复项的字段成为主键
在“数据库”窗口中选择该表。
单击工具栏上的“复制”。
然后单击工具栏上的“粘贴”。
在“粘贴表方式”对话框中,键入已复制的表的名称,单击“只粘贴结构”,然后单击“确定”。
在“设计”视图中打开新表,选择复制表中包含重复记录的字段。
单击工具栏上的“主键”以基于选定字段创建主键。
保存并关闭该表。
仅将唯一的记录追加到新表
基于包含重复记录的原始表创建一个新查询。
在“查询设计”视图中,单击工具栏上的“查询类型”,然后单击“追加查询”。
在“追加”对话框中,在“表名称”列表中单击新表的名称,然后单击“确定”。
添加来自原始表的所有字段,方法是将星号 (*) 拖动到查询设计网格中。
单击工具栏上的“运行”。
当您收到将要追加行的消息时,请单击“是”。
当您收到 Microsoft Access 无法在追加查询中追加所有记录时,请单击“是”。这样,只会将不重复的记录传输到新表中,放弃重复记录。
一、SQL SERVER 和ACCESS的数据导入导出
常规的数据导入导出:
使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤:
○1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation
○2Services(数据转换服务),然后选择 czdImport Data(导入数据)。
○3在Choose a Data Source(选择数据源)对话框中选择Microsoft Access as the Source,然后键入你的.mdb数据库(.mdb文件扩展名)的文件名或通过浏览寻找该文件。
○4在Choose a Destination(选择目标)对话框中,选择Microsoft OLE DB Prov ider for SQL Server,选择数据库服务器,然后单击必要的验证方式。
○5在Specify Table Copy(指定表格复制)或Query(查询)对话框中,单击Copy tables(复制表格)。
○6在Select Source Tables(选择源表格)对话框中,单击Select All(全部选定)。下一步,完成。
Transact-SQL语句进行导入导出:
1.在SQL SERVER里查询access数据: 免费网页模版下载http://www.it55.com
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\DB.mdb";User ID=Admin;Password=')...表名 45398 http://www.it55.com it55学习IT知识,享受IT生活 4dfkjn
2.将access导入SQL server
在SQL SERVER 里运行:
SELECT *
INTO newtable
FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\DB.mdb";User ID=Admin;Password=' )...表名 it55.com
3.将SQL SERVER表里的数据插入到Access表中
在SQL SERVER 里运行:
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source=" c:\DB.mdb";User ID=Admin;Password=')...表名
(列名1,列名2)
select 列名1,列名2 from sql表 精美韩国模版下载http://www.it55.com
实例:
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\db.mdb';'admin';'', Test)
select id,name from Test
INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\trade.mdb'; 'admin'; '', 表名)
SELECT *
FROM sqltablename
http://www.it55.com/
delete a
from ta a
where exists(select 1 from ta where name=a.name amd Item = a.Item and flag <a.flag)
---------------------------------
-- Author: HEROWANG(让你望见影子的墙)
-- Date : 2009-07-15 07:06:42
---------------------------------
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
go
CREATE TABLE [tb] (name VARCHAR(5),Item VARCHAR(4),value NUMERIC(4,2),tag INT)
INSERT INTO [tb]
SELECT 'John','ITCH',89.33,1 UNION ALL
SELECT 'John','ITCH',33.22,2 UNION ALL
SELECT 'Alex','ITCH',67.77,3 UNION ALL
SELECT 'Jacky','ITCH',89.01,1 UNION ALL
SELECT 'Alex','YHTC',34.22,2 UNION ALL
SELECT 'Bruce','YHTC',35.11,2 UNION ALL
SELECT 'Bruce','YHTC',89.11,3
delete t
from tb t where exists(select 1 from tb where name=t.name and item=t.item and tag<t.tag)
select * from tb
name Item value tag
John ITCH 89.33 1
Alex ITCH 67.77 3
Jacky ITCH 89.01 1
Alex YHTC 34.22 2
Bruce YHTC 35.11 2
delete a
from ta a
where tag <> (select min(tag) from ta where name=a.name amd Item = a.Item )
delete a
from ta a
where tag in (select min(tag) from ta where name=a.name amd Item = a.Item )
select * from tb t
where not exists(select * from tb where t.name=name and t.item=item and tag<t.tag )
--功能概述:删除重复记录
在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢?谢谢!
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
3、查找表中多余的重复记录(多个字段)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
比方说在A表中存在一个字段“name”,而且不同记录之间的“name”值有可能会相同,
现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;
Select Name,Count(*) From A Group By Name Having Count(*) > 1
如果还查性别也相同大则如下:
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1