【问题标题】:How to transpose SQL output on conditional basis?如何根据条件转置 SQL 输出?
【发布时间】:2019-06-05 20:25:31
【问题描述】:

我正在尝试编写一个查询来将行转换为列。附加的图像有一个我想要转置的示例表和预期的输出。

感谢任何输入。

【问题讨论】:

标签: sql sql-server transpose


【解决方案1】:

选项 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。我在代码中使用了条件聚合。
猜你喜欢
  • 1970-01-01
  • 2015-04-26
  • 2017-05-05
  • 1970-01-01
  • 2022-07-20
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多