SQL Server PIVOT für Schlüsselwerttabelle

8

Ich habe eine Tabelle mit Attributen, die auf einem Schlüsselwert basieren. Beispiel:

%Vor%

Wenn ich hieraus wähle, bekomme ich:

%Vor%

Ich habe mich gefragt, ob ich die PIVOT-Syntax verwenden könnte, um dies in:

umzuwandeln %Vor%

Ich weiß, dass alle meine Tabellen die gleichen Schlüssel haben werden. (Leider kann ich die Tabellenstruktur nicht einfach ändern. Das ist es, was mich dazu bringt, PIVOTS zu versuchen).

Das große Problem hierbei ist jedoch, dass Pivots eine Aggregationsfunktion benötigen, um verwendet zu werden. Gibt es eine Möglichkeit, dies abzuwenden? Tue ich es völlig falsch, dies zu versuchen? Oder gibt es eine bessere Lösung?

    
Kyle 29.12.2010, 16:49
quelle

2 Antworten

7

Ein Pivot ist nicht schneller als wiederholte Self-Joins für eine feste Spaltenausgabe.

%Vor%

Wenn Sie PIVOT verwenden möchten, verwenden Sie einfach MAX. Da Sie pro Objekt / Schlüssel eine Zeile haben, ist es trotzdem trivial und erfüllt die PIVOT-Anforderung.

Wenn Sie eine unbekannte Anzahl von Zeilen in Spalten PIVOTIEREN möchten, dann ist dies dynamisches SQL (gemäß SQL Server 2000-Lösungen) oder im Client-Code.

Wenn jedes Objekt eine feste Anzahl von Attributen hat, würde ich eine zweite Tabelle mit echten Spalten, die von einem Trigger verwaltet werden, in Erwägung ziehen. Tollpatschig, aber macht das Lesen leichter

    
gbn 29.12.2010, 16:59
quelle
5

Nein, Sie können das Aggregat nicht vermeiden. SQL Server benötigt eine Möglichkeit, die vielen möglichen Zeilen in einem Wert zu kombinieren. Sie haben zufällig einen Wert, aber die Funktion PIVOT wurde für viele Zeilen erstellt.

%Vor%     
Sir Wobin 29.12.2010 17:03
quelle

Tags und Links