Heim >Datenbank >MySQL-Tutorial >Wie kann ich Spalten in SQL Server mit dem PIVOT-Operator drehen und verketten?

Wie kann ich Spalten in SQL Server mit dem PIVOT-Operator drehen und verketten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-01 12:23:13717Durchsuche

How to Pivot and Concatenate Columns in SQL Server Using the PIVOT Operator?

Pivot-Tabelle und verkettende Spalten in SQL Server

Die angegebene SQL Server-Datenbank enthält Datensätze mit ID, TYPE, SUBTYPE, COUNT und MONTH Spalten. Das Ziel besteht darin, diese Daten in eine Pivot-Tabelle umzuwandeln, in der TYPE und SUBTYPE in neue Spalten verkettet werden und COUNT für übereinstimmende ID- und MONTH-Werte summiert wird.

Um dies zu erreichen, stellt SQL Server den PIVOT-Operator bereit, der dynamisch ist generiert Spalten basierend auf den bereitgestellten Werten. So können Sie dieses Problem mit PIVOT angehen:

DECLARE @sql AS VARCHAR(MAX);
DECLARE @pivot_list AS VARCHAR(MAX);
DECLARE @select_list AS VARCHAR(MAX);

SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + PIVOT_CODE + ']',
       @select_list = COALESCE(@select_list + ', ', '') + 'ISNULL([' + PIVOT_CODE + '], 0) AS [' + PIVOT_CODE + ']'
FROM (
    SELECT DISTINCT [TYPE] + '_' + SUBTYPE AS PIVOT_CODE
    FROM TableName
) AS PIVOT_CODES;

SET @sql = ';WITH p AS (
    SELECT ID, [MONTH], [TYPE] + ''_'' + SUBTYPE AS PIVOT_CODE, SUM([COUNT]) AS [COUNT]
    FROM TableName
    GROUP BY ID, [MONTH], [TYPE] + ''_'' + SUBTYPE
)
SELECT ID, [MONTH], ' + @select_list + '
FROM p
PIVOT (
    SUM([COUNT])
    FOR PIVOT_CODE IN (
        ' + @pivot_list + '
    )
) AS pvt';

EXEC (@sql);

Dieser Code generiert dynamisch die erforderliche Spaltenliste und verwendet den PIVOT-Operator, um die Pivot-Tabelle zu erstellen. Die resultierende Ausgabe hat das gewünschte Format mit verketteten TYPE- und SUBTYPE-Spalten und summierten COUNT-Werten.

Das obige ist der detaillierte Inhalt vonWie kann ich Spalten in SQL Server mit dem PIVOT-Operator drehen und verketten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn