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

问题描述 投票:-2回答:1

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

我有两个表,Table1和Table2。

表1包含以下字段:

R_ID| R_NUMBER | DIRECTION |FROM_KM | TO_KM 1 335 A 10 15 2 335 B 11 13 3 770 A 15.5 18.7 4 770 B 15 19 5 5510 1 15.95 17.35

表2如下

R_ID| R NUMBER | DIRECTION |KM LOCATION 1 335 A 10 2 335 A 10.3 3 335 A 10.5 4 335 A 10.7 5 335 A 11 6 335 B 12 7 335 B 12.5 8 335 B 13 9 770 A 15 10 770 B 16.5 11 770 A 17 12 770 A 18.5 13 770 B 19 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 34 5510 1 18.37

我想基于路线号,方向连接两个表,并在表1的“from_km”和“to_km”值的范围之间动态填充table2的“KM位置字段”。

期望如下:

R_ID| R_NUMBER | DIRECTION |FROM_KM | TO_KM | KM_LOCATION 1 335 A 10 15 10,10.3,10.5,10.7,11 2 335 B 11 13 12,12.5,13 3 770 A 15.5 18.7 15,17,18.5 4 770 B 15 19 16.5,19 5 5510 1 15.95 17.35 15.97,............., 17.35

此外,表2的ID:33,34不应包括在结果中,因为它超出了from_km,to_km of table1的范围。

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

sql plsql hana
1个回答
0
投票

从需求描述中,假设数据库是oracle(11及以上)listagg和pivot函数就足够了......例如:

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


如果想在单独的列中使用km_loc,请使用pivot功能。

如果需要更多,请分享您尝试的查询以及您遇到的确切问题...

如果它在PLSQL中,我们可以通过执行立即执行命令来获得动态选择查询...

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