In SQL Server können Sie mit dynamischen Pivot-Spalten eine Pivot-Tabelle erstellen, deren Spalten sich basierend auf Werten in einer anderen Tabelle ändern. Dies ist nützlich, wenn die Anzahl der Pivot-Spalten im Voraus unbekannt ist oder sich häufig ändert.
Betrachten Sie das folgende Formular:
Sie möchten eine Pivot-Tabelle erstellen, die eine Spalte für jede Eigenschaft in der Tabelle Eigenschaft enthält. Da sich die Anzahl der Eigenschaften jedoch ändern kann, benötigen Sie eine Möglichkeit, die Spaltennamen dynamisch abzurufen.
Um dynamische Pivot-Spalten zu erstellen, können Sie dynamisches SQL mit der PIVOT-Klausel verwenden. Der folgende Code demonstriert eine Lösung:
<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX); DECLARE @query AS NVARCHAR(MAX); -- 获取作为逗号分隔字符串的唯一属性名称 SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(Name) FROM property FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, ''); -- 构造动态查询 SET @query = 'SELECT * FROM ( SELECT o.object_id, p.Name, o.value FROM PropertyObjects AS o INNER JOIN property AS p ON o.Property_Id = p.Id ) AS t PIVOT ( MAX(value) FOR Name IN (' + @cols + ') ) AS p;'; -- 执行动态查询 EXEC(@query);</code>
Die dynamische Abfrage gibt eine Pivot-Tabelle zurück, die eine Spalte für jede Eigenschaft in der Tabelle Eigenschaft enthält. Der Wert in der Pivot-Tabelle ist der Maximalwert für jede Attribut-Objekt-Kombination.
Zum Beispiel, wenn die Tabelle Eigenschaft die folgenden Eigenschaften enthält:
und die Tabelle PropertyObjects enthält die folgenden Daten:
OBJECT_ID | PROPERTY_ID | VALUE |
---|---|---|
1 | 1 | ee |
1 | 2 | fd |
1 | 3 | fdf |
1 | 4 | ewre |
2 | 1 | dsd |
2 | 2 | sss |
2 | 3 | dfew |
2 | 4 | dff |
Dynamische Abfrage gibt die folgende Pivot-Tabelle zurück:
OBJECT_ID | PROPERTY1 | PROPERTY2 | PROPERTY3 | PROPERTY4 |
---|---|---|---|---|
1 | ee | fd | fdf | ewre |
2 | dsd | sss | dfew | dff |
Das obige ist der detaillierte Inhalt vonWie erstelle ich dynamisch Pivot-Spalten in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!