【发布时间】:2012-10-26 01:42:44
【问题描述】:
我确信这是一个简单的技术,虽然我目前找不到答案!
我有
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
等等...(大约 800 个点名)
有很多点名,我不想在枢轴“FOR”的“IN”子句中列出每个点名 (如下文给出的语法)定义,但可能想使用子查询。
所以我想要的是将所有 POINTNAME 值作为具有 TIMESTAMP AND VALUE 列的列,所以我将获得一个 TIMESTAMP 值和每个 POINTNAME 的许多列,每个 POINTNAME PER TIMESTAMP 只有一个值,所以我不需要聚合任何东西,所以还是选择 max 吧?
类似:
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>;
【问题讨论】:
-
你的 shift 键好像坏了。出于某种原因,随机单词会大写。
标签: sql sql-server tsql subquery pivot