22 Stimmen

SQL Server: Wie wird nach Teilzeichenfolgen gruppiert?

Ich habe die folgende gespeicherte Prozedur, um Daten aus einer Tabelle abzurufen. Die Tabelle enthält eine Spalte "region", die Werte wie "APAC: China" usw. enthält, für die ich die Substring-Funktion verwende, um das : und alles danach zu entfernen.

Das unten stehende funktioniert, außer dass es alle Datensätze separat auflistet, anstatt sie nach meinem Substring zu gruppieren. So habe ich z.B. mehrere Elemente mit der Region "APAC", anstatt nur eines, bei dem alle unten erscheinen.

Meine gespeicherte Prozedur:

CREATE PROCEDURE [dbo].[CountRegions]
AS
BEGIN
    SET NOCOUNT ON;
    SELECT      SUBSTRING(region, 1, CHARINDEX(':', region) - 1) AS region,
                COUNT(*) AS groupCount,
    FROM        SOPR_LogRequests
    WHERE       logStatus = 'active'
    GROUP BY    region
    ORDER BY    groupCount desc, region
    FOR XML PATH('regions'), ELEMENTS, TYPE, ROOT('ranks')
END

Mein Ergebnis:

    APAC
    1

    EMEA
    1

    APAC
    1

  // ...

Erwartetes Ergebnis:

    APAC
    2

    EMEA
    1

  // ...

Kann mir hier jemand helfen?

Vielen Dank für jegliche Hilfe, Tim.

31voto

dav1dsm1th Punkte 1696

Ihr group by würde nicht wissen, ob Sie sich auf die zugrunde liegende Spalte oder auf die Ausgabe Ihres Funktionscodes beziehen (es würde die zugrunde liegende Spalte annehmen), daher müssen Sie den Code im group by wiederholen:-

CREATE PROCEDURE [dbo].[CountRegions]
AS
BEGIN
    SET NOCOUNT ON;
    SELECT      SUBSTRING(region, 1, CHARINDEX(':', region) - 1) AS region,
                COUNT(*) AS groupCount,
    FROM        SOPR_LogRequests
    WHERE       logStatus = 'active'
    GROUP BY    SUBSTRING(region, 1, CHARINDEX(':', region) - 1)
    ORDER BY    groupCount desc, region
    FOR XML PATH('regions'), ELEMENTS, TYPE, ROOT('ranks')
END

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X