Tabela przestawna MS SQL Server z podzapytaniem w klauzuli kolumny
Jestem pewien, że jest to prosta technika, ale jak dotąd nie mogę znaleźć odpowiedzi!
mam
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
itp ... (za około 800 POINTNAMES)
z wieloma nazwami punktowymi nie chcę wypisywać każdego z nich w klauzuli 'IN' pivot 'FOR' (jak podano poniżej w składni), ale chciałbym użyć podzapytania.
Tak więc chciałbym, aby wszystkie wartości POINTNAME były kolumnami z kolumną TIMESTAMP AND VALUE, więc otrzymam jedną wartość TIMESTAMP i wiele kolumn z każdym POINTNAME, jest tylko jedna wartość na POINTNAME PER TIMESTAMP, więc nie muszę agregować cokolwiek więc tak po prostu wybierasz max?
Coś jak:
SELECT [TIMESTAMP] FROM ( SELECT * FROM POINT_TABLE)
PIVOT( Max[Value] FOR [POINTNAME] IN (SELECT DISTINCT [POINTNAME] FROM POINT_TABLE)
wytworzyłoby
TIMESTAMP AHU01 AHU02
2012-10-10 16:00:00 20 25
2012-10-10 16:15:00 26 35
Zdaję sobie sprawę, że prawdopodobnie nie jest to takie proste, ale mam nadzieję, że otrzymasz to, co próbuję osiągnąć?
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>;