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

时间:2019-01-05 01:49:39

标签: sql sql-server

我的任务是找出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列

2 个答案:

答案 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
);