如何在使用sql或pl/sql从两个表检索值时添加动态列?

如何在使用sql或pl/sql从两个表检索值时添加动态列?,sql,plsql,hana,Sql,Plsql,Hana,我在SQL中遇到了以下有趣的情况。我正在寻求专家的帮助/建议来解决这种情况 我有两张桌子,表一和表二 表1包含以下字段: R|U ID | R|U编号|方向|从| KM |到| KM 1335A1015 2335B113 3770 A 15.5 18.7 4770 B 15 19 5510115.9517.35 表2如下: R|U ID | R编号|方向|公里位置 1335A10 2335 A 10.3 335 A 10.5 4335 A 10.7 5335A 11 6335B12 7335 B

我在SQL中遇到了以下有趣的情况。我正在寻求专家的帮助/建议来解决这种情况

我有两张桌子,表一和表二

表1包含以下字段:

R|U ID | R|U编号|方向|从| KM |到| KM 1335A1015 2335B113 3770 A 15.5 18.7 4770 B 15 19 5510115.9517.35

表2如下:

R|U ID | R编号|方向|公里位置 1335A10 2335 A 10.3 335 A 10.5 4335 A 10.7 5335A 11 6335B12 7335 B 12.5 8335 B 13 9770 A 15 10770 B 16.5 11770a 17 12770 A 18.5 13770b19 16 5510 1 15.97 17 5510 1 15.99 18 5510 1 16.07 19 5510 1 16.17 20 5510 1 16.27 21 5510 1 16.37 22 5510 1 16.47 23 5510 1 16.47 24 5510 1 16.57 25 5510 1 16.67 26 5510 1 16.77 27 5510 1 16.87 28 5510 1 16.97 29 5510 1 17.07 30 5510 1 17.17 31 5510 1 17.27 32 5510 1 17.35 33 5510 1 17.37 345510118.37

我想根据表2的路线编号、方向和填充KM位置字段,在表1的from KM和to KM值范围内动态连接两个表

期望如下:

R|U ID | R|U编号|方向|从| KM |到| KM | KM |位置 1335A1010,10.3,10.5,10.7,11 2335 B 11 13 12,12.5,13 3770 A 15.5 18.7 15,17,18.5 4770 B 15 19 16.5,19 5510115.9517.3515.97,…..,17.35

此外,表2的ID:33和34不应包含在结果中,因为它超出了表1的_km到_km范围


我尝试了两个表之间的简单联接,但遇到了所有匹配元组的表1的路由id的重复条目

根据需求描述,假设数据库是oracle 11及以上版本的listagg和pivot函数就足够了。。。 例如:

如果需要单独列中的km_loc,请使用pivot函数

如果需要更多信息,请分享您尝试的查询以及您面临的确切问题


如果是在PLSQL中,我们可以通过执行立即命令进行动态选择查询,以使需求…

@GordonLinoff在问题中添加了示例数据。我正在处理HANA数据库。我使用了STRING_AGG函数,它与listag函数具有相同的属性。它工作正常,表的KM_位置的所有值都包含在考虑的连接条件的结果集中。鉴于,考虑到表1中从_KM到_KM字段之间的范围,我正在寻找仅包含表2中KM_位置值的输出。例如,表2的33、34行不应包含在结果中,因为它超出了表1的_km到_km字段的范围。
select t1.route_id,
      t1.route_number,
      t1.direction,
      t1.from_km,
      t1.to_km
      ,
      (select listagg(km_location,',') from     table2 t2
where t2.route_number=t1.route_number
and t2.direction=t1.direction) as km_loc
from table1 t1;

-- output:

ROUTE_ID    ROUTE_NUMBER    DIRECTION   FROM_KM TO_KM   KM_LOC
1   335 A   10  15  10,15,11,10.7,10.5,10.3
2   335 B   11  13  12,13,12.5
3   770 A   15.5    18.7    17,18.5
4   770 B   15  19  16.5,19