2016-05-24 54 views
2

我有一个查询,返回'透视'结果SET。我遇到的问题是我需要与每个时间戳匹配的参数来自稍微不同的时间戳---如下图所示。SQL数据透视报告 - 没有根据需要分组

我需要每个结合5个参数--- GTY,TMP,速率,MF,PRS ---到下一个任意 “MAXTIME”,其中它们忽略空

任何想法1线??

SELECT [time], Tagname, GTY, TMP, FLOW as Rate, MF, PRS 
FROM y 
PIVOT 
(
     max(lastvalue) 
     FOR [tag2] IN (GTY, TMP, FLOW, MF, PRS) 
) AS P 

SQL Piv

+0

请[编辑]你的问题标题的东西,说明你的问题有或问你问。 * SQL *和*数据透视表*都是您使用的标签中的信息,这意味着标题中没有相关内容。对于在搜索结果中找到它的未来读者来说,它应该足够具有描述性。谢谢。 –

回答

1

集团,所以你能留住时间部分。
如果您需要列出逗号分隔的所有唯一值而不是max,那么我有一个CLR聚合函数,如果您使用的是SQL Server,则可以使用它。

SELECT max([time]) AS 'time', 
     Tagname, 
     max(GTY) AS 'GTY', 
     max(TMP) AS 'TMP', 
     max(FLOW) AS 'Rate', 
     max(MF) AS 'MF', 
     max(PRS) AS 'PRS' 
FROM y 
GROUP BY Tagname 

或者通过

SELECT max([time]) AS 'time', 
      Tagname, 
      max(GTY) AS 'GTY', 
      max(TMP) AS 'TMP', 
      max(FLOW) AS 'Rate', 
      max(MF) AS 'MF', 
      max(PRS) AS 'PRS' 
    FROM (SELECT [time], Tagname, GTY, TMP, FLOW as Rate, MF, PRS 
      FROM y 
      PIVOT 
      (
      max(lastvalue) 
      FOR [tag2] IN (GTY, TMP, FLOW, MF, PRS) 
     ) AS P) y 
    GROUP BY Tagname 

或者更好的是包裹在论坛中的支点,使用CTE

WITH PIV AS 
(SELECT [time], Tagname, GTY, TMP, FLOW as Rate, MF, PRS 
FROM y 
PIVOT 
(
     max(lastvalue) 
     FOR [tag2] IN (GTY, TMP, FLOW, MF, PRS) 
) AS P) 
SELECT max([time]) AS 'time', 
      Tagname, 
      max(GTY) AS 'GTY', 
      max(TMP) AS 'TMP', 
      max(FLOW) AS 'Rate', 
      max(MF) AS 'MF', 
      max(PRS) AS 'PRS' 
    FROM PIV 
    GROUP BY Tagname 
+0

CTE赢得胜利! –