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 | +----+------+------+------+------+------+------+------+-----+