2016-05-24 60 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贏得勝利! –