我有3个表需要连接,最终结果是某些列的枢轴.

情况如下:

表1

ID COLUMN_A COLUMN_B COLUMN_C COLUMN_G NN_COLUMN_H NN_COLUMN_I
1 10 1 Aa 123aa null null
1 20 2 Aa 56211 blah null
1 30 3 Aa 123aa vvvv null
2 40 4 Bb 678cf null null
2 50 5 Bb 56211 blah mmmm

表2

ID COLUMN_C COLUMN_J NN_COLUMN_K
Aa_G Aa AaA null
Aa_G Bb AaA null
Aa_G Cc AaA 1234
Aa_G Dd AaA 5678

表3

ID COLUMN_D COLUMN_E COLUMN_F COLUMN_L NN_COLUMN_M NN_COLUMN_N
1 VALUE1 10 01-03-2024 True 12 0000a
1 VALUE1 11 02-03-2024 True 34 0000b
1 VALUE2 10 01-03-2024 True 56 0000b
2 VALUE1 15 01-03-2024 True 78 0000b
2 VALUE2 12 01-03-2024 True 89 0000s
2 VALUE2 12 02-03-2024 True 45 00001

表4,最终结果

ID VALUE1 VALUE2 COLUMN_F COLUMN_C COLUMN_G COLUMN_J COLUMN_L
1 10 10 01-03-2024 Aa Aa_G AaA True
1 11 null 02-03-2024 Aa Aa_G AaA True
2 15 12 01-03-2024 Bb Aa_G AaA True
2 null 12 02-03-2024 Bb Aa_G AaA True

我try 了以下几种方法:

SELECT * 
FROM
TABLE3
LEFT JOIN TABLE1
ON TABLE3.ID = TABLE1.ID
LEFT JOIN TABLE2
ON TABLE1.COLUMN_C = TABLE2.COLUMN_C
WHERE TABLE3.COLUMN_D in ('VALUE1', 'VALUE2')

然而,对于在哪里或如何实现轴心线,我陷入了困境. 应该透视的列是表3中的Column_D和Column_E.

推荐答案

参见实施例

select id
  ,max(case when column_d='VALUE1' then column_e end)value1
  ,max(case when column_d='VALUE2' then column_e end)value2
  ,column_f
from table3
group by id,column_f
order by id,column_f;

每个日期超过1(ID,VALUEx)的情况

select id
  ,max(case when column_d='VALUE1' then column_e end)value1
  ,max(case when column_d='VALUE2' then column_e end)value2
  ,column_f,rn
from (
  select *
    ,row_number()over(partition by id,column_f,column_d order by column_f)rn
  from table3
)t
group by id,column_f,rn
order by id,column_f,rn;

加入成为

select *
from(
  select id
    ,max(case when column_d='VALUE1' then column_e end)value1
    ,max(case when column_d='VALUE2' then column_e end)value2
    ,column_f
  from table3
  WHERE TABLE3.COLUMN_D in ('VALUE1', 'VALUE2')
  group by id,column_f
)t3
LEFT JOIN TABLE1
ON T3.ID = TABLE1.ID
LEFT JOIN TABLE2
ON TABLE1.COLUMN_C = TABLE2.COLUMN_C
order by t3.id,t3.column_f;

Fiddle

Sql相关问答推荐

SQL—如何在搜索的元素之后和之前获取元素?

Postgres,使用iLike运算符从json数组中搜索的工作方式与从常规表中搜索不同

基于多个字段删除Access中的重复记录,同时保留最低优先级

在请求结束之前,PostgreSQL不会考虑使用中的删除

部分匹配表中元素的MariaDB查询查找结果

如何在Presto中将多个列合并到一个数组中

有没有办法在Postgres中存储带有时区的时间戳,而不将其转换为UTC

将FLOAT转换为VARBINARY,然后再转换回FLOAT

同一表的Oracle SQL更新(含YTD合计)

如何将insert语句重复n次使一个值递增?

查找滑动窗口框架中的最大和最小列值

我们可以使用连接改进包含多个子查询的查询吗

按所选的值将记录分组到不同的列中

如何将特定值从 JSON 列中的一个字段移动到 PostgreSQL 中的另一个字段?

PostgreSQL - 递归地聚合来自不同列的属性

如何根据与 BigQuery 中另一个表的匹配更新一个表中的列?

我如何编写一个遍历数组数组并将所有值连接成一个字符串的 postgres 函数

具有日期时间条件的存储过程

As400 (IBM i) SQL 表 QSYS2.SYSTABLES 上的元数据

Postgres 窗口函数未按预期工作