需要找出 SQL Server 表中的所有列是否具有相同的值

3
我需要找出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列


1
查找 except 运算符 - 我经常使用它 https://www.techonthenet.com/sql_server/except.php - Doug Coats
2个回答

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 

使用带有分区的row_number可以通过为每个基于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 

谢谢,这正是我在寻找的! :-) - Michael Loose

0
最好的解决方案是仅显示具有一个或多个列中不同值的行,除了第一列ID。
您可能正在寻找以下简单查询,其 WHERE 子句过滤掉所有字段具有相同值的行(我假设有5个字段 - 不包括ID)。
SELECT *
FROM mytable t
WHERE NOT (
        field1 = field2
    AND field1 = field3
    AND field1 = field4
    AND field1 = field5
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接