SQL join,将多个值显示到一行

问题描述 投票:0回答:1

如果我有下表(仅作为示例):

表1:

id | 纳税年度

1 | 2000

1 | 2001

2 | 2001

表2:

id | 纳税年度 | 价值

1 | 2000 |一个

1 | 2000 | 2000

1 | 2000 |

如何连接两个表,以便可以像这样将多个值显示到一行中?

id | 纳税年度 | 价值

1 | 2000 |甲、乙、丙

1 | 2001 | ---

2 | 2001 | ---

我使用的是 db2,因此无法使用某些函数,例如 GROUP_CONCAT()。 LIST_AGG() 是一个选项吗?或者有没有办法拥有嵌套的 select 语句并以某种方式连接结果,就像这样?

select
 id
,concat((select value
  from database.table2 tab2
  join database.table1 tab1
  on tab1.id=tab2.id))
from database.table1
sql db2
1个回答
0
投票

您可以使用

LISTAGG()
,如下所示:

select a.id, a.tax_year,
  listagg(b.value, ',') within group (order by b.value) as value
from table1 a
left join table2 b on b.id = a.id and b.tax_year = a.tax_year
group by a.id, a.tax_year;

结果:

 ID  TAX_YEAR  VALUE 
 --- --------- ----- 
 1   2000      a,b,c 
 1   2001      null  
 2   2001      null  

请参阅 db<>fiddle 处的运行示例。

© www.soinside.com 2019 - 2024. All rights reserved.