如何根据条件转换SQL输出?

如何根据条件转换SQL输出?,sql,sql-server,transpose,Sql,Sql Server,Transpose,我正在尝试编写一个查询来将行转换为列。所附的图像有一个示例表,我想转置它并期望输出 欢迎您的任何意见 选项1。条件聚合 select labid, subjectid, max(case when timepoint='T0' then val1 end) T0_val1, max(case when timepoint='T0' then val2 end) T0_val2, max(case when timepoint='T1' then val1 end) T1_val1, max(ca

我正在尝试编写一个查询来将行转换为列。所附的图像有一个示例表,我想转置它并期望输出

欢迎您的任何意见


选项1。条件聚合

select labid, subjectid,
max(case when timepoint='T0' then val1 end) T0_val1,
max(case when timepoint='T0' then val2 end) T0_val2,
max(case when timepoint='T1' then val1 end) T1_val1,
max(case when timepoint='T1' then val2 end) T1_val2
from input
group by labid, subjectid;
备选案文2。解压/枢轴

select * from
(
select labid, subjectid, timepoint+'_'+col as timepoint_col, val
from
(select labid, subjectid, timepoint,  val1, val2
from input) as src
unpivot 
(
  val for col in (val1, val2) 
) as unpiv) as x
pivot
(
max(val)
 for timepoint_col in ([T0_val1],[T0_val2],[T1_val1],[T1_val2])
) as piv1

为此使用条件聚合。在这里已经被问了几百遍,回答了几百遍。看起来你想把桌子旋转两次。试着先旋转一次:另请看:谢谢@arturro。我在代码中使用了条件聚合。