2017-01-20 10 views
2

Wie kann ich den häufigsten Wert in jeder Zeile in SQL Server finden?SQL Server: Häufigster Wert in jeder Zeile

Beispiel:

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 

In der ersten Reihe, 'a' ist häufigster Wert usw.

+4

Sind die Werte in verschiedenen Spalten? – jarlh

+0

Fügen Sie die tatsächliche Tabellenstruktur mit einigen Beispieldaten hinzu. – iamdave

+0

Ist es eine einzelne Varchar-Spalte mit Werten wie "A d a a c a b"? Wenn Sie mehrere Spalten haben, sollten Sie überlegen, sie zu refixieren. Erstellen Sie eine weitere Tabelle, die über einen Fremdschlüssel verknüpft ist und einen Datensatz pro Spalte enthält. Dieser Prozess wird als Datenbanknormalisierung bezeichnet und ist wichtig, um solche Aufgaben zu vereinfachen oder solche Abfragen effizienter zu machen. –

Antwort

2

Betrachtet man diese Werte in separaten Spalten sind mit einer UNPIVOT Abfrage die Lösung wie etwas aussehen würde. ....

Testdaten

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'); 

Abfrage

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 

Ergbnisssatzes

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

Gut gemacht, um zu sehen, dass dies mehrere Spalten und nicht eine Zeichenfolge +1 war –

Verwandte Themen