MS SQL Server-Pivot-Tabelle mit Unterabfrage in Spaltenklausel
Ich bin mir sicher, dass dies eine einfache Technik ist, obwohl ich bisher keine Antwort gefunden habe!
ich habe
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 ... (für ca. 800 PUNKTNAMEN)
Mit vielen Punktnamen möchte ich nicht jeden in der 'IN'-Klausel der Pivot-Definition' FOR '(als Syntax unten angegeben) auflisten, sondern möchte vielleicht eine Unterabfrage verwenden.
Also, was ich möchte, sind alle POINTNAME-Werte als Spalten mit einer TIMESTAMP AND VALUE-Spalte, also bekomme ich einen TIMESTAMP-Wert und viele Spalten mit jedem POINTNAME, es gibt nur einen Wert pro POINTNAME PRO TIMESTAMP, so dass ich nicht aggregieren muss irgendetwas also trotzdem max wählen?
So etwas wie:
SELECT [TIMESTAMP] FROM ( SELECT * FROM POINT_TABLE)
PIVOT( Max[Value] FOR [POINTNAME] IN (SELECT DISTINCT [POINTNAME] FROM POINT_TABLE)
würde produzieren-
TIMESTAMP AHU01 AHU02
2012-10-10 16:00:00 20 25
2012-10-10 16:15:00 26 35
Mir ist klar, dass es wahrscheinlich nicht so einfach ist, aber hoffentlich kriegst du, 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>;