需要确定SQL Server表中的所有列是否具有相同的值
我的任务是找出SQL Server表中的所有列是否具有完全相同的值。表内容由存储过程创建,列数可能有所不同。第一列是ID,如果所有列的值完全相同,则必须比较第二列和以下列 目前,我不知道如何实现这一目标 最好的解决方案是只显示行,这些行在一个或多个列中具有不同的值,但第一个ID为的列除外 非常感谢你的帮助 -->编辑:该表如下所示:需要确定SQL Server表中的所有列是否具有相同的值,sql,sql-server,Sql,Sql Server,我的任务是找出SQL Server表中的所有列是否具有完全相同的值。表内容由存储过程创建,列数可能有所不同。第一列是ID,如果所有列的值完全相同,则必须比较第二列和以下列 目前,我不知道如何实现这一目标 最好的解决方案是只显示行,这些行在一个或多个列中具有不同的值,但第一个ID为的列除外 非常感谢你的帮助 -->编辑:该表如下所示: ID Instance1 Instance2 Instance3 Instance4 Instance5 =========
ID Instance1 Instance2 Instance3 Instance4 Instance5
=====================================================
A 1 1 1 1 1
B 1 1 0 1 1
C 55 55 55 55 55
D Driver Driver Driver Co-driver Driver
E 90 0 90 0 50
F On On On On On
结果应该是这样的,只显示具有一个或多个不同列值的行
ID Instance1 Instance2 Instance3 Instance4 Instance5
=====================================================
B 1 1 0 1 1
D Driver Driver Driver Co-driver Driver
E 90 0 90 0 50
我的表有1000多行和40多列
最好的解决方案是只显示行,这些行在一个或多个列中具有不同的值,但第一个ID为的列除外
您可能正在寻找下面的简单查询,其WHERE
子句过滤掉所有字段具有相同值的行(我假设有5个字段-不包括id)
您可以使用row_number()实现这一点 请尝试以下代码
With c as(
Select id
,field_1
,field_2
,field_3
,field_n
,row_number() over(partition by field_1,field_2,field_3,field_n order by id asc) as rn
From Table
)
Select *
From c
Where rn = 1
row_number with partition将通过基于字段_1、字段_2、字段_3、字段_n为行分配一个数字来显示字段是否重复,例如,如果有两行具有相同的字段值,则内部查询将显示给您
rn field_1 field_2 field_3 field_n id
1 x y z a 5
2 x y z a 9
之后,在查询的外部选择rn=1,您将获得一个基于字段的不重复查询
此外,如果要从表中删除重复的数字,也可以应用
With c as(
Select id
,field_1
,field_2
,field_3
,field_n
,row_number() over(partition by field_1,field_2,field_3,field_n order by id asc) as rn
From Table
)
delete
From c
Where rn > 1
查找“除此之外”操作符-我一直在使用它谢谢,这正是我要找的!:-)
With c as(
Select id
,field_1
,field_2
,field_3
,field_n
,row_number() over(partition by field_1,field_2,field_3,field_n order by id asc) as rn
From Table
)
delete
From c
Where rn > 1