Jestem pewien, że jest to prosta technika, chociaż nie mogę znaleźć odpowiedzi do tej pory!Tabela przestawna MS SQL Server z podzapytaniem w kolumnie klauzula
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
etc ... (około 800 POINTNAMES)
z wieloma pointnames nie chcę listy każdy w 'IN' klauzuli czopa 'dla' (jako składnia podana poniżej), ale chciałby użyć prawdopodobnie podkwerendy.
Więc chciałbym, aby wszystkie wartości POINTNAME były kolumnami z kolumną TIMESTAMP i 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 t potrzebujesz agregować wszystko, więc po prostu wybierz max mimo to?
Coś jak:
SELECT [TIMESTAMP] FROM (SELECT * FROM POINT_TABLE)
PIVOT(Max[Value] FOR [POINTNAME] IN (SELECT DISTINCT [POINTNAME] FROM POINT_TABLE)
byłoby produce-
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 proste, ale mam nadzieję, że masz za 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>;
możliwość zmiany klucza wydaje się być uszkodzony. Losowe słowa są z jakiegoś powodu kapitalizowane. –