um nur die höchsten Wertaufzeichnungen zurückzugeben

Hallo ich versuche, die datasätze für den Wert zurückzugeben, der die meisten Vorkommnisse hat. Mit dieser Abfrage

SELECT b.section,c.valuename ,count(a.value) as counts FROM [dbo].[SurveyResponse] a JOIN [dbo].[Questions] b ON A.qid=b.qid join [dbo].[SurveyValues] c on a.value=c.value where profileid=2 group by b.section,c.valuename order by 1,2 

Ich bekomme diese Ergebnisse ( Originalbild ):

 + -- + ----------------------- + ----------------- + ------ + | | section | valuename | counts | + -- + ----------------------- + ----------------- + ------ + | 1 | Customer & Markets | Completely Agree | 2 | | 2 | Customer & Markets | Somewhat Agree | 4 | | 3 | Data and Analytics | Completely Agree | 3 | | 4 | Data and Analytics | Somewhat Disagree | 3 | | 5 | Leadership & Culture | Completely Agree | 2 | | 6 | Leadership & Culture | Somewhat Agree | 4 | | 7 | Organization & Talent | Completely Agree | 3 | | 8 | Organization & Talent | Somewhat Agree | 2 | | 9 | Organization & Talent | Somewhat Disagree | 1 | | 10 | Products & Services | Completely Agree | 3 | | 11 | Products & Services | Somewhat Agree | 1 | | 12 | Products & Services | Somewhat Disagree | 2 | | 13 | Technology & Innovation | Completely Agree | 3 | | 14 | Technology & Innovation | Somewhat Agree | 5 | | 15 | Vision & Strategy | Completely Agree | 2 | | 16 | Vision & Strategy | Somewhat Agree | 4 | + -- + ----------------------- + ----------------- + ------ + 

Aus diesem Ergebnis möchte ich den Abschnitt und den Wertnamen mit den Mittelwerten der Zählungen zurückgeben. Zum Beispiel, Zeile 7, 8, 9, sollte es Zeile 7 mit dem Wert 3 zurückgeben, da es mehr Vorkommen hat.

Kann jemand bitte helfen?

Lassen Sie mich annehmen – basierend auf dem Beispiel -, dass Sie die höchste Zählung für jeden Abschnitt wünschen. Das ist eine einfache Anwendung von windowsfunktionen:

 select x.* from (select q.section, c.valuename, count(sr.value) as counts, row_number() over (prtition by q.section order by count(sr.value) desc) as seqnum from [dbo].[SurveyResponse] sr join [dbo].[Questions] q on sr.qid = q.qid join [dbo].[SurveyValues] sv on sr.value = sv.value where profileid = 2 group by q.section, c.valuename ) x where seqnum = 1; 

Wenn du deine Abfrage in einen CTE steckst, kannst du eine korrelierte Unterabfrage verwenden, um dein gewünschtes Ergebnis zu erhalten.

 ; with CTE as ( -- CTE SELECT b.section , c.valuename , count(a.value) as counts FROM [dbo].[SurveyResponse] a JOIN [dbo].[Questions] b ON A.qid=b.qid join [dbo].[SurveyValues] c on a.value=c.value where profileid=2 group by b.section,c.valuename ) select Section, ValueName, counts from CTE a where ValueName = ( -- Correlated Subquery select top 1 ValueName from CTE b where a.Section = b.Section order by counts desc ) order by Section