我的任务是找出SQL Server表中的所有列是否具有完全相同的值。该表内容由存储过程创建,并且列数可以不同。如果所有列的值都完全相同,则第一列是ID,第二列和后面的列必须进行比较。
目前我不知道如何实现这一目标。
最好的解决方案是仅显示具有ID的第一列以外的一个或多个列中具有不同值的行。
非常感谢您的帮助!
->编辑:表格看起来像这样:
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列
答案 0 :(得分:1)
您可以通过使用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
具有分区的行号将通过基于field_1,field_2,field_3,field_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
答案 1 :(得分:0)
最好的解决方案是仅显示一行或多行中具有不同值的行,但第一行具有ID。
您可能正在寻找以下简单查询,该查询的WHERE
子句会过滤掉所有字段具有相同值的行(我假设有5个字段-不包括id)。
SELECT *
FROM mytable t
WHERE NOT (
field1 = field2
AND field1 = field3
AND field1 = field4
AND field1 = field5
);