MS-SQL-Server-pivot-Tabelle mit Unterabfrage in column-Klausel
Ich bin sicher, dies ist eine einfache Technik, aber ich kann nicht finden, eine Antwort bisher!
Habe ich
TIMESTAMP | POINTNAME | VALUE
2012-10-10 16:00:00 AHU01 20
2012-10-10 16:00:00 AHU02 25
2012-10-10 16:00:15 AHU01 26
2012-10-10 16:00:15 AHU02 35
etc... ( ca 800 POINTNAMES)
mit vielen pointnames ich will keine Liste jeweils in die " IN " - Klausel der pivot 'FÜR'
(wie syntax, die unten gegeben) definition würde es aber gerne verwenden, vielleicht mit einer Unterabfrage.
Also was ich möchte ist, alle POINTNAME Werte als Spalten mit EINEM TIMESTAMP UND WERT-Spalte, so bekomme ich einen TIMESTAMP-Wert und viele Spalten mit jeweils POINTNAME, es gibt nur einen Wert pro POINTNAME PRO TIMESTAMP, also brauche ich nicht zu aggregieren nichts, so wählen Sie einfach die max überhaupt?
Etwas wie:
SELECT [TIMESTAMP] FROM ( SELECT * FROM POINT_TABLE)
PIVOT( Max[Value] FOR [POINTNAME] IN (SELECT DISTINCT [POINTNAME] FROM POINT_TABLE)
produzieren würde-
TIMESTAMP AHU01 AHU02
2012-10-10 16:00:00 20 25
2012-10-10 16:15:00 26 35
Ich begreife, dass es wohl keine dieses einfache, aber hoffentlich bekommen Sie das, was ich versuche zu erreichen?
PIVOT-SYNTAX:
SELECT <non-pivoted column>,
[first pivoted column] AS <column name>,
[second pivoted column] AS <column name>,
...
[last pivoted column] AS <column name>
FROM
(<SELECT query that produces the data>)
AS <alias for the source query>
PIVOT
(
<aggregation function>(<column being aggregated>)
FOR
[<column that contains the values that will become column headers>]
IN ( [first pivoted column], [second pivoted column],
... [last pivoted column])
) AS <alias for the pivot table>
<optional ORDER BY clause>;
- Sie shift-Taste scheint kaputt zu sein. Zufällige Wörter werden großgeschrieben, aus irgendeinem Grund.
Du musst angemeldet sein, um einen Kommentar abzugeben.
für dynamische Anzahl von Spalten, die Sie haben, um dynamisches SQL verwenden
SQL FIDDLE-BEISPIEL
create table
und dynamisch Komponieren Spalten einer Tabelle. 2. schreiben Sieselect * into <New Table_Name> from ....
und die Tabelle wird erstellt