【问题标题】:SQL - Pivot rows to columns and take cartesian productSQL - 将行旋转到列并采用笛卡尔积
【发布时间】:2019-01-08 01:06:16
【问题描述】:

我正在尝试仅使用 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 查询填充它。

【问题讨论】:

    标签: sql join pivot cross-join


    【解决方案1】:

    您可以选择 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
    

    【讨论】:

    • 谢谢,你能解释一下这个查询吗?另外我假设需要为用户 2 重复表达式?
    • 是的,对于其他用户,您可以使用相同的 MAX() 模式。在预期结果中,我们有非重复的 study_id,因此我按 study_id 分组。之后,如果参与者是“user_1”,我将选择性地获取条件值,这让我得到了 user_1condition_1,然后我对 condition_2、_3 等重复此操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多