これまでのところ答えが見つかりませんが、これは簡単なテクニックだと思います!
私は持っている
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... (約 800 個の POINTNAMES の場合)
多くのポイント名があるので、ピボットの 'FOR' 定義の 'IN' 句にそれぞれをリストしたくありませんが (構文は以下に示します)、おそらくサブクエリを使用したいと考えています。
したがって、すべての POINTNAME 値を TIMESTAMP AND VALUE 列の列として取得したいので、1 つの TIMESTAMP 値と各 POINTNAME の多くの列を取得します。POINTNAME PER TIMESTAMP ごとに 1 つの値しかないため、集計する必要はありません。とにかく最大を選択するだけですか?
何かのようなもの:
SELECT [TIMESTAMP] FROM ( SELECT * FROM POINT_TABLE)
PIVOT( Max[Value] FOR [POINTNAME] IN (SELECT DISTINCT [POINTNAME] FROM POINT_TABLE)
生成するだろう-
TIMESTAMP AHU01 AHU02
2012-10-10 16:00:00 20 25
2012-10-10 16:15:00 26 35
おそらくこれほど単純ではないことは承知していますが、私が達成しようとしていることを理解していただければ幸いです。
ピボット構文:
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>;