首页 > 解决方案 > SQL - 将行旋转到列并采用笛卡尔积

问题描述

我正在尝试仅使用 SQL 查询来执行以下操作。我不太确定如何,但认为我应该使用枢轴和交叉连接?

将第一个表(称为它entries)转换为第二个表combined

entries

study_id     participant    condition_1    condition_2   condition_3

   1          user_1          true            false        false

   1          user_2          true            true         false

   2          user_2          false           false        true

combined

study_id  user_1condition_1  user_1condition_2  user_1condition_3  user_2condition_1  user_2condition_2 user_2condition_3

   1            true               false              false              true                true               false

   2            N/A                N/A                N/A                false               false              true

我们可以看到这实质上是在一个表格中填充字段,这些字段是参与者与条件的笛卡尔积。但我不确定如何制作新表并使用 SQL 查询填充它。

标签: sqljoinpivotcross-join

解决方案


您可以选择 group by 以及 MAX 逻辑来获得您想要的结果。

select study_id
       ,max(case when participant='user_1' then condition_1 end) as user_1condition_1
       ,max(case when participant='user_1' then condition_2 end) as user_1condition_2
       ,max(case when participant='user_1' then condition_3 end) as user_1condition_3
from entities
group by study_id

推荐阅读