SQL Server: valeur la plus fréquente dans chaque ligne

Comment puis-je find la valeur la plus fréquente dans chaque ligne dans SQL Server?

Exemple:

1 adaacab --> a 2 bacbbbd --> b 3 hahhbcd --> h 4 ddchgpm --> d 5 eeghdeh --> e 

En première rangée, «a» est la valeur la plus fréquente, etc.

Considérant que ces valeurs sont dans des colonnes séparées, avec une requête UNPIVOT la solution ressemblerait à quelque chose comme …

Données de test

 Declare @T table (ID INT , Col1 varchar(1) , Col2 varchar(1) , Col3 varchar(1) , Col4 varchar(1) , Col5 varchar(1) , Col6 varchar(1) , Col7 varchar(1)) Insert Into @T values ('1','a','d','a','a','c','a','b'), ('2','b','a','c','b','b','b','d'), ('3','h','a','h','h','b','c','d'), ('4','d','d','c','h','g','p','m'), ('5','e','e','g','h','d','e','h'); 

Question

 WITH X AS ( Select ID , Val, COUNT(*)total ,ROW_NUMBER() OVER (PARTITION BY ID ORDER BY COUNT(*) DESC) rn from @T UNPIVOT (Val FOR N IN (Col1,Col2,Col3,Col4,Col5,Col6,Col7))up GROUP BY ID , Val ) Select t.* , Val FROM X INNER JOIN @T t ON x.ID = t.ID WHERE rn = 1 

Jeu de résultats

 +----+------+------+------+------+------+------+------+-----+ | ID | Col1 | Col2 | Col3 | Col4 | Col5 | Col6 | Col7 | Val | +----+------+------+------+------+------+------+------+-----+ | 1 | a | d | a | a | c | a | b | a | | 2 | b | a | c | b | b | b | d | b | | 3 | h | a | h | h | b | c | d | h | | 4 | d | d | c | h | g | p | m | d | | 5 | e | e | g | h | d | e | h | e | +----+------+------+------+------+------+------+------+-----+