Zet alle rijen terug waar een veld hetzelfde is, maar er is minstens één verschil in de andere velden

Ik probeer om een ​​vraag te schrijven die verslagen zal terugkeren waar het gebied in kolom 1 het zelfde is, maar er is minstens één verschil in specifieke andere kolommen.

Bijvoorbeeld:
Ik wil de kolommen 2 en 4 voor elke waarde in kolom 1 vergelijken. Als er een verschil is, moet ik alle velden in beide rijen retourneren.

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

zou terugkeren:
Luchtfilter | Vorm | Ronde | Kleur | Rood
Luchtfilter | Vorm | Paneel | NULL | NULL
omdat de waarde in kolom 4 niet overeenkomt tussen de records
en
Hood | Kleur | Zwart | Afwerking | Gepoedercoat
Hood | Finish | Gepoedercoat | Kleur | Zwart
omdat de waarden in kolom 2 en kolom 4 niet overeenkomen tussen de records

Ik kan maar één record krijgen voor elk onderdeel om terug te keren.

Hier is de code die ik heb geprobeerd:

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 antwoord

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
toegevoegd
Het werkt! Ik voegde er onderscheidend aan toe omdat het initieel 5 keer het aantal records dat ik had terug kreeg. Heel erg bedankt!!
toegevoegd de auteur user955289, de bron
Ik heb nog een vraag over het wijzigen van de criteria van deze zoekopdracht. Moet ik het hier vragen of een andere post indienen?
toegevoegd de auteur user955289, de bron
Ik heb een vergelijkbare query nodig die rijen met verschillen retourneert, gebaseerd op de gegevens in het voorgaande veld. In rijen waarin kolom 1 hetzelfde is, kan kolom 4 bijvoorbeeld null zijn als de waarde in kolom 2 verschillend is tussen de records. De applicatie is ontworpen om vragen te stellen op basis van het antwoord, dus als ik vraag welke kleur het item is en het antwoord zwart is, moet de volgende vraag hetzelfde zijn. Maar als er twee antwoorden zijn, kan ik een vraag beantwoorden als het antwoord zwart is, maar ik hoef die vraag niet te stellen als het antwoord zilver is. Misschien moet ik het in meer detail uitleggen.
toegevoegd de auteur user955289, de bron
Zal ik doen. Bedankt, Joe!
toegevoegd de auteur user955289, de bron
@ user955289: Wat is de vraag?
toegevoegd de auteur Joe Stefanelli, de bron
@ user955289 Dat klinkt anders genoeg om een ​​nieuw bericht te rechtvaardigen.
toegevoegd de auteur Joe Stefanelli, de bron