返回一个字段相同的所有行,但其他字段中至少存在一个差异

时间:2011-10-27 18:58:11

标签: sql-server sql-server-2008

我正在尝试编写一个查询,该查询将返回第1列中的字段相同的记录,但在特定的其他列中至少存在一个差异。

例如:
我想比较第1列中每个值的第2列和第4列。如果存在差异,我需要返回两行中的所有字段。

此数据集
列1 |列2 |栏3 | Column4 | Column5
空气过滤器|形状|圆形|颜色|红色
空气过滤器|形状|面板
Nerf Bar |表面处理|抛光|材质|不锈钢
Nerf Bar | Finish |粉末涂层|材料|不锈钢
发动机罩|颜色|黑色|表面处理|粉末涂层
发动机罩|表面处理|粉末涂层|彩色|黑色

将返回:
空气过滤器|形状|圆形|颜色|红色
空气过滤器|形状|面板|空| NULL
因为第4列中的值在记录之间不匹配

发动机罩|颜色|黑色|表面处理|粉末涂层
发动机罩|表面处理|粉末涂层|彩色|黑色
因为第2列和第4列中的值在记录之间不匹配

我只能为每个部分获得一条记录。

以下是我尝试过的代码:

Select *
from [My_Table] as a 
where exists(select null from [My_Table] as b
where a.column1 = b.column1
and (a.column2 = b.column2
or a.column3 = b.column3
or a.column4 = b.column4
or a.column5 = b.column5))

1 个答案:

答案 0 :(得分:1)

SELECT t1.column1, t1.column2, t1.column3, t1.column4, t1.column5
    FROM My_Table t1
        INNER JOIN My_Table t2
            ON t1.column1 = t2.column1
    WHERE COALESCE(t1.column2,'') <> COALESCE(t2.column2,'')
        OR COALESCE(t1.column4,'') <> COALESCE(t2.column4,'')