2017-02-14 2 views
2

Я с помощью SQL Server 2014. Я в настоящее время есть таблица, которая выглядит примерно так:Sql Server Pivot с несколькими столбцами из записи

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 

Другой подход по unpivoting и pivoting в данных

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 - Добавлен еще один подход. –

Смежные вопросы