1つのフィールドが同じだが、他のフィールドには少なくとも1つの違いがあるすべての行を返します

私は列1のフィールドは同じですが、特定の他の列に少なくとも1つの違いがあるレコードを返すクエリを記述しようとしています。

例:
私は列1の各値に対して列2と列4を比較したいと思います。差がある場合は、両方の行のすべてのフィールドを返す必要があります。

This data set
Column1|Column2|Column3|Column4|Column5
Air Filter|Shape|Round|Color|Red
Air Filter|Shape|Panel
Nerf Bar|Finish|Polished|Material|Stainless Steel
Nerf Bar|Finish|Powder Coated|Material|Stainless Steel
Hood|Color|Black|Finish|Powder Coated
Hood|Finish|Powder Coated|Color|Black

戻ります:
エアフィルター|シェイプ|ラウンド|カラー|レッド エアーフィルタ|シェイプ|パネル| NULL | NULL
NULL
列4の値がレコード間で一致しないためです。
そして
フード|カラー|ブラック|フィニッシュ|粉体塗装
フード|仕上げ|粉体塗装|カラー|ブラック 列2と列4の値がレコード間で一致しないためです

私は返すべき各部分のためのただ1つの記録を得ることができます。

私が試したコードは次のとおりです:

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

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,'')
1
追加された
できます!私は最初に私が持っていたレコードの量の5倍を返したので、別名を追加しました。どうもありがとうございます!!
追加された 著者 user955289,
私はこのクエリの基準を変更することについて別の質問があります。ここで質問したり、別の投稿を送信したりする必要がありますか?
追加された 著者 user955289,
前のフィールドのデータに基づいて、相違のある行を返す同様のクエリが必要です。たとえば、列1が同じ行では、列2の値がレコード間で異なる場合、列4はNULLになることがあります。アプリケーションは応答に基づいて質問をするように設計されているので、アイテムの色を尋ねて答えが黒であれば、次の質問は同じでなければなりません。しかし、2つの答えがある場合は、答えが黒であるかどうかの質問にフォローアップすることができますが、答えが銀の場合は同じ質問をする必要はありません。私はより詳細に説明しなければならないかもしれません。
追加された 著者 user955289,
しましょう。ありがとう、ジョー!
追加された 著者 user955289,
@ user955289:どうしたの?
追加された 著者 Joe Stefanelli,
@ user955289これは、新しい投稿を正当なものにするのに十分な音です。
追加された 著者 Joe Stefanelli,