Abrufen eines einzelnen characterfolgenwertes beim Gruppieren von Zeilen in SQL server 2014 Management Studio

Ich habe eine Abfrage, die ich zusammensetze, die versuchen würde, Zeilen zusammen aus einer Reihe von Spalten zu gruppieren, die String-Werte enthalten. Ich weiß, dass ich Spalten mit String-Werten verketten kann, aber ich möchte in der Lage sein, einen einzelnen Zellenwert anstelle aller Werte in dieser Gruppe zu melden.

Hier ist eine Beispieltabelle und Ergebnis suche ich:

Tabelle:

ID_Number Code Rating ------------------------------ 12345678901112 V 100 12345678901113 V 200 12345678901114 H 320 12345678981112 V 300 12345678981113 V 200 12345699981113 D 700 

Abfrage so weit:

 SELECT LEFT(Ex.ID_Number, 10) AS ID_Number, ???(Ex.Code) AS Code, MAX(Ex.Rating) AS Rating FROM dbo.Exampletable Ex GROUP BY LEFT(Ex.ID_Number, 10); 

Gewünschten Erfolge:

 ID_Number Code Rating --------------------------- 1234567890 H 320 1234567898 V 300 1234569998 D 700 

Meine aktuellen Ergebnisse:

 ID Number Code Rating --------------------------- 1234567890 NULL 320 1234567898 NULL 300 1234569998 NULL 700 

   

Eine Möglichkeit, die erwartete Ergebnismenge zu erhalten, ist, ROW_NUMBER zu verwenden:

 SELECT ID_Number, Code, Rating FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY LEFT(Ex.ID_Number,10) ORDER BY Rating DESC) AS rn, LEFT(ID_Number,10) AS ID_Number, Code, Rating FROM dbo.Exampletable ) AS t WHERE t.rn = 1 

In MySQL können Sie eine Verknüpfung zu einer abgeleiteten Tabelle verwenden, die den bereits aggregierten Rating enthält:

 SELECT LEFT(t1.ID_Number,10) AS ID_Number, t1.Rating, t1.Code FROM Exampletable AS t1 JOIN ( SELECT LEFT(Ex.ID_Number,10) AS ID_Number, MAX(Ex.Rating) AS Rating FROM Exampletable GROUP BY LEFT(Ex.ID_Number,10) ) AS t2 ON LEFT(t1.ID_Number,10) = t2.ID_Number AND t1.Rating = t2.Rating 

Um das gewünschte Ergebnis zu erhalten, kannst du dein bestehendes Ergebnis mit der vorhandenen Tabelle nach ID_Number und Rating ID_Number . Um dies zu tun, können Sie CTE . Diese Lösung ist für SQL server

 ;WITH CTE_Result AS ( SELECT LEFT(Ex.ID_Number,10) AS ID_Number, MAX(Ex.Rating) AS Rating FROM dbo.Exampletable Ex GROUP BY LEFT(Ex.ID_Number,10) ) SELECT CR.ID_Number, Ex.Code, CR.Rating FROM CTE_Result CR INNER JOIN dbo.Exampletable Ex ON ID_Number = LEFT(Ex.ID_Number,10) AND Ex.Rating = CR.Rating 

UPDATE für MySQL-Lösung

 SELECT CR.ID_Number, Ex.Code, CR.Rating FROM ( SELECT LEFT(Ex.ID_Number,10) AS ID_Number, MAX(Ex.Rating) AS Rating FROM dbo.Exampletable Ex GROUP BY LEFT(Ex.ID_Number,10) ) CR INNER JOIN dbo.Exampletable Ex ON ID_Number = LEFT(Ex.ID_Number,10) AND Ex.Rating = CR.Rating