|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
珍贵的资金可以用于其他业务的启动,诸如市场、广告或调研和开发等。使用SQLServer2005的新功效NOW_NUMBER和CTE能够很好的完成.
举例申明以下:
创建测试数据:
复制代码代码以下:
createtableDup1
(
Col1intnull,
Col2varchar(20)null
)
insertintoDup1values
(1,"aaa"),
(2,"aaa"),
(2,"aaa"),
(2,"aaa"),
(3,"bbb"),
(3,"bbb"),
(4,"ccc"),
(4,"ddd"),
(5,"eee")
select*fromDup1
能够检察到反复的数占有:
复制代码代码以下:
SELECTCol1,Col2,COUNT(*)ASDupCountFROMDup1GROUPBYCol1,Col2HAVINGCOUNT(*)>1
接上去先容怎样delete失落反复的数据:
1.NOW_NUMBER:SQLServer2005增加了很好用的RANKING函数(NOW_NUMBER,RANK,DENSE_RANK,NTILE),使用NOW_NUMBER()OVER(PARTITIONGY)最为间接,也最为便利,不克不及修正表大概发生过剩的列.
起首会分派一个列号码,以Col1,Col2组合来分区排序.
复制代码代码以下:
SELECTCol1,Col2,ROW_NUMBER()OVER(PARTITIONBYCol1,Col2ORDERBYCol1)ASrnFROMDup1
失掉的序号以下:
很分明的是反复列都分组支解排序,只必要delete失落排序序号>1的便可.
复制代码代码以下:
--用到CTE
WITHDupsD
AS(
SELECTCol1,Col2,
ROW_NUMBER()OVER(PARTITIONBYCol1,Col2ORDERBYCol1)ASrn
FROMDup1
)
DELETEDupsD
WHERErn>1;
--大概
DELETEAFROM(
SELECTCol1,Col2,
ROW_NUMBER()OVER(PARTITIONBYCol1,Col2ORDERBYCol1)ASrn
FROMDup1)AWHEREA.rn>1
2.创立一个标识键独一的表记一列.
复制代码代码以下:
ALTERTABLEdbo.Dup1
ADD
PKINTIDENTITY
NOTNULL
CONSTRAINTPK_Dup1PRIMARYKEY;
SELECT*
FROMDup1;
删除找出与Col1,Col2不异而且比Dup1.PK年夜的纪录,也就是保存反复值中PK最小的纪录.
复制代码代码以下:
DELETEDup1
WHEREEXISTS(SELECT*
FROMDup1ASD1
WHERED1.Col1=Dup1.Col1
ANDD1.Col2=Dup1.Col2
ANDD1.PK>Dup1.PK);
3.selectdistantinto,这类办法借助一个新的table,把不反复的了局集转移到新table中.
复制代码代码以下:
SELECTdistinctCol1,Col2INTONoDupsFROMDup1;select*fromNoDups
倡议接纳第一种和第三种办法,第一种多见于T-SQL的编程中,第三种在ETL中经常利用.DBaaS并不意味着解决方案提供者要让自己失业。与其他系统一样,在实施DBaaS解决方案时,客户可能需要部署、迁移、支持、异地备份、系统集成和灾难恢复等方面的帮助。 |
|