Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要确定SQL Server表中的所有列是否具有相同的值_Sql_Sql Server - Fatal编程技术网

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

需要确定SQL Server表中的所有列是否具有相同的值,sql,sql-server,Sql,Sql Server,我的任务是找出SQL Server表中的所有列是否具有完全相同的值。表内容由存储过程创建,列数可能有所不同。第一列是ID,如果所有列的值完全相同,则必须比较第二列和以下列 目前,我不知道如何实现这一目标 最好的解决方案是只显示行,这些行在一个或多个列中具有不同的值,但第一个ID为的列除外 非常感谢你的帮助 -->编辑:该表如下所示: ID Instance1 Instance2 Instance3 Instance4 Instance5 =========

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

最好的解决方案是只显示行,这些行在一个或多个列中具有不同的值,但第一个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