列子句中带有子查询的 MS SQL Server 数据透视表
Posted
技术标签:
【中文标题】列子句中带有子查询的 MS SQL Server 数据透视表【英文标题】:MS SQL Server pivot table with subquery in column clause 【发布时间】: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 键好像坏了。出于某种原因,随机单词会大写。 【参考方案1】:对于动态列数,您必须使用动态 SQL
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
SQL FIDDLE EXAMPLE
【讨论】:
然后根据结果创建新表?抱歉还是新手! 您要根据结果创建临时表吗?还是要创建一个真实的表? 我认为是一张真正的桌子,但找出两者的方法会很好! :-) 我还有一个我没有提到的简单的列,称为“质量”,当点数据没有被传达时,点名称可以具有值为 0 的“坏”质量。我将如何忽略此列但仍取零值。即时间戳|点名 |价值 |质量 2012-10-10 16:00:00 AHU01 0 坏 要插入表格有两种方法 - 1.您必须用create table
组合@stmt 并动态组合表格中的列。 2.你可以写select * into <New Table_Name> from ....
,然后表就会被创建以上是关于列子句中带有子查询的 MS SQL Server 数据透视表的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 数据库中带有 Group by 子句的 JPQL 不起作用
JPA 和 SQL Server 的 ORDER BY 子句中的列无效