Errr, nein. Sie können Ihre gewünschte Tabelle nicht mit SQL generieren. Dies ist keine gültige Pivot-Tabelle.
"the values of uid are not fixed, they may vary dynamically, so, a_orig, a_dis, b_orig, b_dis, etc cannot be hardcoded into SQL."
Entschuldigung, das ist auch nicht möglich. Sie müssen die genauen Werte angeben, die als Spaltenüberschriften platziert werden sollen. Wenn Sie eine SELECT
-Anweisung schreiben, müssen Sie die Namen der Spalten (Felder) angeben, die Sie zurückgeben. Es gibt keinen Weg um dies herum.
jedoch unten sind die Schritte erforderlich, um eine „gültige“ SQL Server Pivot-Tabelle aus Ihren Daten zu erstellen:
Ich habe zugeben bekam, als ich vor kurzem mein erstes PIVOT
musste schreiben in SQL Server habe ich auch wie verrückt gegoogelt, aber nicht verstanden, wie man es schreibt.
Allerdings habe ich schließlich herausgefunden, was Sie tun müssen, also hier ist die Schritt-für-Schritt-Anleitung, die Sie nirgendwo anders finden ..!
(Readers diese Anweisungen leicht anpassen können, mit Ihren eigenen Daten zu verwenden!)
1. Ihre Beispieldaten erstellen
Wenn Sie erwarten Leser auf Ihre Frage zu antworten, sollten Sie zumindest Geben Sie ihnen das SQL, um Ihre Beispieldaten zu erstellen, damit sie etwas zum Arbeiten haben.
So, hier ist, wie ich die Daten in Ihrer Frage gezeigt schaffen würde:
CREATE TABLE tblSomething
(
[gid] nvarchar(100),
[uid] nvarchar(100),
[dat] datetime,
[origamt] int,
[disamt] int
)
GO
INSERT INTO tblSomething VALUES ('AA', 'a', '2016-05-12', 200, 210)
INSERT INTO tblSomething VALUES ('AA', 'b', '2016-05-12', 300, 305)
INSERT INTO tblSomething VALUES ('AA', 'c', '2016-05-12', 150, 116)
INSERT INTO tblSomething VALUES ('BB', 'a', '2016-05-12', 120, 125)
INSERT INTO tblSomething VALUES ('BB', 'c', '2016-05-12', 130, 136)
INSERT INTO tblSomething VALUES ('CC', 'a', '2016-05-12', 112, 115)
INSERT INTO tblSomething VALUES ('CC', 'b', '2016-05-12', 135, 136)
GO
2. eine SQL-Abfrage schreiben, die drei Spalten gibt genau
Die erste Spalte die Werte enthalten, die erscheint in der linken Spalte Ihrer PIVOT-Tabelle.
Die zweite Spalte enthält die Liste der Werte, die in der oberen Zeile erscheinen.
Die Werte in der dritten Spalte werden basierend auf den Zeilen-/Spaltenüberschriften in Ihrer PIVOT-Tabelle positioniert.
Okay, hier ist die SQL, dies zu tun:
SELECT [gid], [uid], [origamt]
FROM tblSomething
Dies ist der Schlüssel zu einem PIVOT
verwenden. Ihre Datenbankstruktur kann so schrecklich kompliziert sein, wie Sie möchten, aber wenn Sie eine PIVOT
verwenden, können Sie nur mit genau drei Werten arbeiten. Nicht mehr und nicht weniger.
Also, hier ist, was diese SQL zurückgibt. Unser Ziel ist es, eine Pivot-Tabelle, die (nur) diese Werte zu schaffen:
eine Liste der unterschiedlichen Werte für die Kopfzeile
Beachten Sie, wie in der Pivot-Tabelle I
3. Finden Ich habe das Ziel zu erstellen, ich habe drei Spalten (Felder) genannt a
, b
und c
. Dies sind die drei eindeutigen Werte in Ihrer Spalte [uid]
.
Also, um ein Komma verketteten Liste dieser einzigartigen Werte zu bekommen, ich diese SQL verwenden können:
DECLARE @LongString nvarchar(4000)
SELECT @LongString = COALESCE(@LongString + ', ', '') + '[' + [uid] + ']'
FROM [tblSomething]
GROUP BY [uid]
SELECT @LongString AS 'Subquery'
Wenn ich dies gegen Ihre Daten laufen, hier ist was ich bekommen:
Jetzt schneiden Sie diesen Wert ein: Wir müssen ihn zweimal in unserem allgemeinen SQL SELECT-Befehl platzieren, um die Pivot-Tabelle zu erstellen.
4. Setzen sie alle zusammen
Dies ist der schwierige Bit.
Sie benötigen eine SQL-Befehl aus Schritt 2 und das Ergebnis aus Schritt 3 in einen einzigen SELECT
Befehl zu kombinieren.
Hier ist, was Ihre SQL aussehen würde:
SELECT [gid],
-- Here's the "Subquery" from part 3
[a], [b], [c]
FROM (
-- Here's the original SQL "SELECT" statement from part 2
SELECT [gid], [uid], [origamt]
FROM tblSomething
) tmp ([gid], [uid], [origamt])
pivot (
MAX([origamt]) for [uid] in (
-- Here's the "Subquery" from part 3 again
[a], [b], [c]
)
) p
... und hier ist ein verwirrendes Bild, das zeigt, wo die Komponenten kommen, und die Ergebnisse dieser Befehl ausgeführt wird.
Wie Sie der Schlüssel dazu sehen können, ist, dass SELECT
Anweisung in Schritt 2, und in diesem Befehl Ihre drei ausgewählten Felder an der richtigen Stelle setzen.
Und, wie ich bereits sagte, sind die Spalten (Felder) in der Pivot-Tabelle aus den in Schritt erhaltenen Werte 3:
[a], [b], [c]
Sie könnten natürlich einen Teil dieser Werte verwenden. Vielleicht möchten Sie einfach die PIVOT Werte für [a], [b]
sehen und [c]
ignorieren.
Puh!
Also, das ist wie eine Pivot-Tabelle aus Ihren Daten zu erstellen.
I will prefer least lines of code and least complexity.
Ja, viel Glück auf diesem .. !!!
5. Zusammenführen von zwei Pivot-Tabellen
Wenn Sie wirklich wollten, könnten Sie den Inhalt zweier solcher Pivot-Tabellen zusammenführen, um die genauen Ergebnisse zu erhalten Sie suchen.
Dies ist leicht genug, um SQL für Shobhit selbst zu schreiben.
Bitte geben Sie eine SQL-Anweisung und ein Beispiel Ihrer Tabellenstruktur mit einigen Dummy-Daten an. Diese Frage ist nicht gut gestaltet. – Mitrucho
*** WARUM *** möchten Sie einen * offensichtlich * numerischen Wert wie 'origamt' als String speichern? ** Tun Sie dies nicht ** Verwenden Sie die ** am besten geeignet ** Datentyp immer - wenn Sie Nummern speichern - einen ** ** numerischen Datentyp verwenden - keine Strings !! –
Hallo Mitrucho. Entschuldigung für das Problem. Jetzt habe ich den Post für Klarheit umgestaltet (vielleicht habe ich). –