sql - 在同一个表 PostgreSql 上加入多个选择查询

标签 sql postgresql join

下面是我得到的示例表结构,

C1  C2  C3 C4
A   D   G  X
B   E   H  X
C   F   I  X

select C2 as 1_C2, C3 as 1_C3 from table1 where C1 = A and C4=X
select C2 as 2_C2, C3 as 2_C3 from table1 where C1 = B and C4=X
select C2 as 3_C2, C3 as 3_C3 from table1 where C1 = C and C4=X

以上就是我得到的三个select语句。现在我需要加入所有三个 select 语句并只获得一行作为输出,

1_C2 2_C2 3_C2 1_C3 2_C3 3_C3    
   D    E    F    G    H    I

看到了多个其他帖子,但不符合此要求。非常感谢任何帮助。

最佳答案

您可以使用 CASE 表达式,结合 MAX():

select MAX(CASE WHEN C1 = 'A' THEN C2 END) as 1_C2,
       MAX(CASE WHEN C1 = 'B' THEN C2 END) as 2_C2,
       MAX(CASE WHEN C1 = 'C' THEN C2 END) as 3_C2,
       MAX(CASE WHEN C1 = 'A' THEN C3 END) as 1_C3,
       MAX(CASE WHEN C1 = 'B' THEN C3 END) as 2_C3,
       MAX(CASE WHEN C1 = 'C' THEN C3 END) as 3_C3
  from table1
 where C1 in ('A', 'B', 'C')
   and C4 = 'X';

关于sql - 在同一个表 PostgreSql 上加入多个选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49659809/

相关文章:

sql - 在左表中获取没有开销的大树

mysql - 使用 Group_Concat 进行内连接

sql - 什么是插槽?

mysql - 查找存储在特定列中的文本的大小

sql - 是否可以在 PostgreSQL 中将当前时间设置为数据类型为时间的列中的默认值?

sql - 一次选择形成大量多对多关系的最佳实践

mysql - 当我从两列中获取数据时如何计算?

MySQL - 如果查询结果的顺序与另一个查询结果的顺序相同,如何比较?

MySQL SELECT 带有包含字符串的额外列

python - 在环境中不设置密码的情况下恢复PostgreSQL数据库