我正在使用Sql Server 2014.我目前有一个看起来像这样的表:
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
我完全不知道如何完成我想要的结果。
答案 0 :(得分: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