【问题标题】:join two oracle results into single output将两个 oracle 结果连接到单个输出中
【发布时间】:2016-04-15 04:45:12
【问题描述】:

全部 我将我的两个查询转换为表格 表1如下:

SITE_ID LEGACY_PACKAGE  NEW_PACKAGE_MOVEMENT
1   CDTPMR  CDTPMRMX
1   CDTPMRNV    CDTPMRMX
1   CDTPMRU CDTPMRUMX
1   CDTPMRUNV   CDTPMRUMX
1   CONN100 CDTPMRMX
1   CONN100NVM  CDTPMRMX
1   CONNULD CONNULD
1   CONNULDNVM  CONNULD
1   ESSENTIALS  SIM3PKG
1   ESSENTLNVM  CDTESS
1   PHNE PREFR  CDTPMRMX

表2如下:

SITE_ID PACKAGE_CODE    SERVICE_RATE
1   CDTESSU 0
1   CDTESSU 0
1   CDTESSU 0
1   CDTESSU 7.93
1   CDTESSU 12.99
1   CDTESSU -7.93
1   CDTESSU 8.99
1   CDTESSU 12.99
1   CDTESSU 0
1   CDTESSU 8.99
1   CDTESSU -5.99
1   CDTESSU 15.99
1   CDTESSU 0
1   CDTESSU 0
1   CDTESSU -5.99

我的新输出应该是这样的

SITE_ID LEGACY_PACKAGE service_rate1    NEW_PACKAGE_MOVEMENT service_rate2

通过将 legacy_package (table1) 与 package_code (table2) 与 service_rate1 进行比较

 by comparing NEW_PACKAGE_MOVEMENT (table1) with package_code (table2) to service_rate2

I am trying different ways in oracle sql, but finding it harder.
is there any clue how to achieve this?

【问题讨论】:

  • 这是您的加入条件 LEGACY_PACKAGE=PACKAGE_CODE?
  • 是获取 service_rate1。我需要将 new_package_movement 与 package_code 与 service_rate2 进行比较。
  • service_rate1 和 service_rate2 有什么区别
  • legacy_package 是旧包及其费率。
  • NEW_PACKAGE_MOVEMENT 是新包装,再次从表 2 中查找服务费率。表 2 包含新旧包装代码及其费率

标签: sql oracle


【解决方案1】:

试试这样的..(未经测试)

    select 
    t1.site_id,t1.legacy_package,
    (case when t1.legacy_package=t2.package_code 
          then t2.service_rate else null end) as service_rate1,
    t1.new_package_movement,
    (case when t1.new_package_movement=t2.package_code
    then t2.service_rate else null end) as service_rate2
    from table1 t1 join 
    table t2 where t1.site_id=t2.site_id and 
   ((t1.legacy_package=t2.package_code) or (t2.new_package_movement=t2.package_code))

【讨论】:

  • 我可以尝试内部查询获取第二个 service_rate1 之类的
  • SELECT DISTINCT T1.site_id, T1.LEGACY_PACKAGE AS "From ICOMS Package cd", T2.SERVICE_RATE, T1.NEW_PACKAGE_MOVEMENT AS "To ICOMS Package cd" , (SELECT T2.SERVICE_RATE AS SERVICE_RATE_NEW FROM table1 T1 INNER JOIN table2 T2 ON T1.site_id =T2.SITE_ID AND T1.NEW_PACKAGE_MOVEMENT=T2.PACKAGE_CODE ) FROM table1 T1 INNER JOIN table2 T2 ON T1.site_id =T2.SITE_ID AND T1.LEGACY_PACKAGE=T2.PACKAGE_CODE ORDER BY T1.site_id , T1.LEGACY_PACKAGE
  • 是的,你的版本很好。我已经试过了。但我想使用上面提供的内部查询。但我得到了 ORA-0142(在内部查询中得到不止一行)
  • 您的内部查询无法正常工作,因为 (SELECT T2.SERVICE_RATE AS SERVICE_RATE_NEW FROM table1 T1 INNER JOIN table2 T2 ON T1.site_id = T2.SITE_ID AND T1.NEW_PACKAGE_MOVEMENT = T2.PACKAGE_CODE) 正在检索不止一行
猜你喜欢
  • 2023-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 2023-04-08
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多