首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS SQL Server透视表在column子句中包含子查询

MS SQL Server透视表在column子句中包含子查询
EN

Stack Overflow用户
提问于 2012-11-06 14:09:06
回答 1查看 27K关注 0票数 12

我确信这是一个简单的技巧,尽管到目前为止我还找不到答案!

我有过

代码语言:javascript
复制
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点)

对于许多点名称,我不想在pivot 'FOR‘(如下所给的语法)定义的' in’子句中列出每个点名称,但我想使用子查询。

所以我想要的是所有的POINTNAME值都是带有时间戳和值列的列,所以我会得到一个时间戳值和许多列,每个POINTNAME每个时间戳只有一个值,所以我不需要聚合任何东西,所以无论如何都要选择max?

类似于:

代码语言:javascript
复制
SELECT [TIMESTAMP] FROM ( SELECT * FROM POINT_TABLE)
PIVOT( Max[Value] FOR [POINTNAME] IN (SELECT DISTINCT [POINTNAME] FROM POINT_TABLE)

会产生-

代码语言:javascript
复制
   TIMESTAMP              AHU01          AHU02
 2012-10-10 16:00:00        20             25
 2012-10-10 16:15:00        26             35

我意识到这可能不是这么简单,但希望你能理解我想要实现的目标?

透视语法:

代码语言:javascript
复制
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>;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-06 14:18:31

对于动态列数,必须使用动态SQL

代码语言:javascript
复制
declare
    @cols nvarchar(max),
    @stmt nvarchar(max)

select @cols = isnull(@cols + ', ', '') + '[' + T.POINTNAME + ']' from (select distinct POINTNAME from TABLE1) as T

select @stmt = '
    select *
    from TABLE1 as T
        pivot 
        (
            max(T.VALUE)
            for T.POINTNAME in (' + @cols + ')
        ) as P'

exec sp_executesql  @stmt = @stmt
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13245364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档