Tsql-query om gelijke rijwaarden langs kolommen te vinden

Ik heb deze tafel

col 1   col 2   col 3   ....    col N
-------------------------------------
1       A       B               fooa        
10      A       foo             cc
4       A       B               fooa

het is mogelijk om met een tsql-query slechts één rij met alleen een waarde te retourneren waarbij de waarden ALLE gelijk zijn?

col 1   col 2   col 3   ....    col N
-------------------------------------
--      A       --              --
3

1 antwoord

SELECT
     CASE WHEN COUNT(col1) = COUNT(*) AND MIN(col1) = MAX(col1) THEN MIN(col1) END AS col1,
     CASE WHEN COUNT(col2) = COUNT(*) AND MIN(col2) = MAX(col2) THEN MIN(col2) END AS col2,
     ...
FROM yourtable

U moet NULL's toestaan ​​in de kolom:

  • COUNT (*) telt ze
  • COUNT (col1) telt niet mee

Dat wil zeggen, een kolom met een mix van As en NULLen is niet één waarde. MIN en MAX zouden beiden A geven omdat ze NULLEN negeren.

Bewerk:

  • heeft DISTINCT verwijderd om hetzelfde te tellen voor NULL-controle
  • MIN/MAX-controle toegevoegd (per Mark Byers verwijderd antwoord) om de uniciteit te controleren
5
toegevoegd
+1 dit is een goed idee
toegevoegd de auteur Mark Byers, de bron
@MicheleVirgilio: opgelost ...
toegevoegd de auteur gbn, de bron
Lees alstublieft de redactie.
toegevoegd de auteur ʞᴉɯ, de bron
Werkt niet meer ...
toegevoegd de auteur ʞᴉɯ, de bron
Perfect bedankt!
toegevoegd de auteur ʞᴉɯ, de bron