2017-10-05 99 views
-2

我有这个表中的SQL Server 2016点快速SQL Server的选择结果作为列名

TestDate TestCode TestResult 
2017-08-30 HGB   5.3  
2017-09-01 HGB   6.1  
2017-09-03 HGB   6.8  
2017-09-06 HGB   7.9  
2017-09-13 HGB   8.5  
2017-08-30 EOS%  48.3  
2017-09-01 EOS%  47.1  
2017-09-03 EOS%  46.4  
2017-09-06 EOS%  47.3  
2017-09-13 EOS%  38.9  

我需要一个查询返回的结果如下图所示:

TestDate HGB  EOS% 
2017-08-30 5.3  48.3  
2017-09-01 6.1  47.1  
2017-09-03 6.8  46.4  
2017-09-06 7.9  47.3  
2017-09-13 8.5  38.9  

Sql Table And Results

这里创建代码&填充表格

Create Table TestResult 
(
TestDate Datetime, 
TestCode Char(10), 
TestResult Char(10) 
) 

Insert Into TestResult Values('2017/08/30','HGB','5.3') 
Insert Into TestResult Values('2017/09/01','HGB','6.1') 
Insert Into TestResult Values('2017/09/03','HGB','6.8') 
Insert Into TestResult Values('2017/09/06','HGB','7.9') 
Insert Into TestResult Values('2017/09/13','HGB','8.5') 

Insert Into TestResult Values('2017/08/30','EOS%','48.3') 
Insert Into TestResult Values('2017/09/01','EOS%','47.1') 
Insert Into TestResult Values('2017/09/03','EOS%','46.4') 
Insert Into TestResult Values('2017/09/06','EOS%','47.3') 
Insert Into TestResult Values('2017/09/13','EOS%','38.9') 
+1

您需要:PIVOT(https://开头的TechNet .microsoft.com/EN-US /库/ ms177410(v = SQL.105)的.aspx) –

回答

0

试试这个:

--modify类型的TestResult列

Create Table TestResult 
(
TestDate Datetime, 
TestCode Char(10), 
TestResult decimal(10, 2) 
) 

Insert Into TestResult Values('2017/08/30','HGB',5.3) 
Insert Into TestResult Values('2017/09/01','HGB',6.1) 
Insert Into TestResult Values('2017/09/03','HGB',6.8) 
Insert Into TestResult Values('2017/09/06','HGB',7.9) 
Insert Into TestResult Values('2017/09/13','HGB',8.5) 
Insert Into TestResult Values('2017/08/30','EOS%',48.3) 
Insert Into TestResult Values('2017/09/01','EOS%',47.1) 
Insert Into TestResult Values('2017/09/03','EOS%',46.4) 
Insert Into TestResult Values('2017/09/06','EOS%',47.3) 
Insert Into TestResult Values('2017/09/13','EOS%',38.9) 

select f1.TestDate, 
sum(case when f1.testcode='HGB' then f1.testresult else 0 end) HGB, 
sum(case when f1.testcode='EOS%' then f1.testresult else 0 end) EOS 
from TestResult f1 
group by f1.TestDate 

如果您不能修改类型列试试这个:

select f1.TestDate, 
max(case when f1.testcode='HGB' then f1.testresult else 0 end) HGB, 
max(case when f1.testcode='EOS%' then f1.testresult else 0 end) EOS 
from TestResult f1 
group by f1.TestDate