Heim >Datenbank >MySQL-Tutorial >Wie werden Daten in T-SQL dynamisch geschwenkt?

Wie werden Daten in T-SQL dynamisch geschwenkt?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-14 20:10:48576Durchsuche

How to Dynamically Pivot Data in T-SQL?

Dynamischer Pivot in T-SQL

Im Bereich der Datenverarbeitung spielt der dynamische Pivot eine wichtige Rolle bei der Konvertierung von Daten vom Zeilenformat in das Spaltenformat. Dies ist besonders nützlich, wenn Sie Daten aggregiert und strukturiert präsentieren müssen.

Angenommen, Sie haben eine Tabelle mit Daten im folgenden Format:

ItemID ColumnName Value
1 name Peter
1 phone 12345678
1 email [email protected]
2 name John
2 phone 87654321
2 email [email protected]
3 name Sarah
3 phone 55667788
3 email [email protected]

Ihr Ziel ist es, diese Tabelle in das folgende Format zu konvertieren:

ItemID name phone email
1 Peter 12345678 [email protected]
2 John 87654321 [email protected]
3 Sarah 55667788 [email protected]

Dynamic Pivot in T-SQL ermöglicht Ihnen die dynamische Implementierung dieser Transformation, ohne dass statische SQL-Anweisungen erforderlich sind. Der folgende Code zeigt, wie diese Aufgabe ausgeführt wird:

<code class="language-sql">CREATE TABLE #Table (
        ID INT,
        ColumnName VARCHAR(250),
        Value VARCHAR(250)
)

INSERT INTO #Table SELECT 1,'name','Peter' 
INSERT INTO #Table SELECT 1,'phone','12345678' 
INSERT INTO #Table SELECT 1,'email','[email protected]' 
INSERT INTO #Table SELECT 2,'name','John' 
INSERT INTO #Table SELECT 2,'phone','87654321' 
INSERT INTO #Table SELECT 2,'email','[email protected]' 
INSERT INTO #Table SELECT 3,'name','Sarah' 
INSERT INTO #Table SELECT 3,'phone','55667788' 
INSERT INTO #Table SELECT 3,'email','[email protected]' 

DECLARE @cols NVARCHAR(2000) 
DECLARE @query NVARCHAR(4000) 

SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT 
                                '],[' + t.ColumnName 
                        FROM    #Table AS t 
                        FOR XML PATH('') 
                      ), 1, 2, '') + ']' 

SET @query = N'SELECT ID,'+ @cols +' FROM 
(SELECT t1.ID,t1.ColumnName , t1.Value FROM #Table AS t1) p 
PIVOT (MAX([Value]) FOR ColumnName IN ( '+ @cols +' )) 
AS pvt;' 

EXECUTE(@query)

DROP TABLE #Table</code>

In diesem Code werden die Funktionen STUFF und EXECUTE verwendet, um dynamische SQL-Anweisungen zu erstellen. Die erstellte Abfrage generiert dynamisch PIVOT-Anweisungen basierend auf verschiedenen Spaltennamen in der Tabelle. Die Aggregatfunktion MAX() stellt sicher, dass für jede Spalte der neueste Wert zurückgegeben wird.

Das Endergebnis ist eine konvertierte Tabelle, die Ihren Anforderungen zur Darstellung Ihrer Daten in einem Pivot-Format entspricht. Diese Technik ist besonders nützlich, wenn mit größeren Datensätzen und komplexen Datenstrukturen gearbeitet wird.

Das obige ist der detaillierte Inhalt vonWie werden Daten in T-SQL dynamisch geschwenkt?. 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