2017-02-14 20 views
2

我使用SQL Server 2014我現在有一個表,它看起來是這樣的:Sql Server的樞軸與創紀錄的多列

labNumber parameter result date 
18897  Nitrate  <0  1/20/2007 
18897  Coliform NEG  1/21/2007 
18897  Arsenic  1  1/22/2007 

我需要那裏是隻有一條記錄創建一個視圖,其應該是這樣的:

labNumber nitate nitrateDate coliform coliformDate arsenic arsenicDate 
18897  <0  1/20/2007 NEG  1/21/2007  1   1/22/2007 

我才意識到,在相同的實驗室數量的每個記錄有使用PIVOT看起來像這樣不同的日期我哈達觀點:

SELECT * 
    FROM (SELECT labNumber, result, parameter 
     FROM ResultsTable) src 
     PIVOT (MAX(result) 
     FOR parameter IN ([Nitrate], [Coliform], [Arsenic])) p 

我完全難住如何完成我想要的結果。

回答

2

考慮到你剛纔每parameter記錄,下面是一個使用conditional aggregate

SELECT labNumber, 
     Max(CASE WHEN parameter = 'Nitrate' THEN result END) AS nitate, 
     Max(CASE WHEN parameter = 'Nitrate' THEN date END) nitateDate, 
     Max(CASE WHEN parameter = 'Coliform' THEN result END) Coliform, 
     Max(CASE WHEN parameter = 'Coliform' THEN date END) ColiformDate, 
     Max(CASE WHEN parameter = 'Arsenic' THEN result END) Arsenic, 
     Max(CASE WHEN parameter = 'Arsenic' THEN date END) ArsenicDate 
FROM yourtable 
GROUP BY labNumber 

另一種方法通過unpivotingpivoting數據

SELECT labNumber, 
     Nitrate, 
     NitrateDate, 
     Coliform, 
     ColiformDate, 
     Arsenic, 
     ArsenicDate 
FROM (SELECT labNumber, 
       intr, 
       col 
     FROM Yourtable 
       CROSS apply (VALUES (result,parameter), 
            (convert(varchar(20),[date],120),parameter + 'Date')) cs(intr, col))a 
     PIVOT (Max(intr) 
      FOR col IN (Nitrate, 
         NitrateDate, 
         Coliform, 
         ColiformDate, 
         Arsenic, 
         ArsenicDate))pv 
+0

這很好地工作的一種方式!謝謝 – Peter

+0

@Peter - 增加了另一種方法。 –