【发布时间】:2014-06-05 22:33:01
【问题描述】:
我需要为以下逻辑编写一个 Oracle 查询代码,不胜感激。
我有一个包含 8 列的表,其中需要为特定业务逻辑考虑 3 列。
表格数据(3列)
A B C
071699 01 I
071699 01W
071699 02W
071699 01W I
071699 02W
更多行。
数据量因情况而异,这意味着每列 A-B 组合可能是一行或多行,通常不在这些行中 至少为 1 个组合填充了 C 列。
此表有超过 100K 的不同 A 值。
我需要实现的逻辑:
- 检查 - 对于特定的 A 值,我们有多少组合 (A-B)。 对于特定的 A:检查是否有任何组合 (A-B) 填充了 C 列数据。
- 从填充的 C 列中获取值并更新同一个表(对于相同 A 的其他组合)
之前的数据(只显示特定的行)
A B C
071699 01 I
071699 01W
071699 02W
查询后的数据
A B C
071699 01 I
071699 01W I
071699 02W I
我有一个 SQL 服务器查询在单个查询中执行此逻辑,但在 Oracle 中不起作用,我收到错误,“单行查询返回多行”
SQL 服务器查询
update c
set c.colC = u.colC
from data_table u
join data_table c on u.colA = c.colA and u.colB <> c.colB
and u.colB = (select MIN(colB) from data_table
where colA = u.colA and colC is not null)
and u.colC is not null and c.colC is null
感谢任何帮助编写类似的 oracle 版本。
【问题讨论】:
-
查看UPDATE
-
尝试将
u.colB = (select更改为u_colB IN (select。 -
感谢您的建议。我尝试使用“IN”并且查询不起作用并且仍然给我错误。对于另一个链接,它提供了非常通用的更新语句的语法,没有给出这个问题的任何细节。如果您能针对此问题提供任何建议,我将不胜感激。
-
对于 A 列和 B 列的相同组合,C 列中是否可以有两个不同的值?如果是,您会采用哪个值来更新?
-
不,情况并非如此,尽管它由具有统计和结束日期的其他列确定。假设是一样的,我们如何将这个 SQL server 查询转换成 oracle。