在选择子查询中,如何从一行中选择一个值,然后从下一行中选择一个值,依此类推?

时间:2018-11-06 14:53:24

标签: sql oracle

对于我的示例,我试图在TABLE1中添加多行的RANGE列值,其中每行的SOURCE列值等于TABLE1中不同行的ID列值,其中PARENT列值这些不同的行等于TABLE2中的ID列值。我还绘制了各种图表以直观地显示此内容。

Diagram of sorts

我在一次只能选择一行TABLE2.ID值以插入Select子查询时遇到麻烦,然后,主选择需要使用下一行的TABLE2.ID值一次又一次地运行。每个表中有数千行。 我玩过抓取和滞后,但是我现在真的不了解该如何解决。我仍在研究方法。...如下所示,我相信它想添加所有TABLE1行的所有RANGE值,因为子查询的选择ID读取为TABLE2中的所有行(其中TABLE1.SOURCE = TABLE2.ID)?

Select
  ID,
  (Select SUM(RANGE)
    from TABLE1
    where SOURCE in
      (Select A.ID
       from TABLE1 A, TABLE2 B
       where A.PARENT = B.ID
      )
   ) as "SUM(RANGE)"
from TABLE2
______________
Result:
______________
ID    SUM(RANGE)
A10    18
A11    18

预期结果:

ID    SUM(RANGE)
A10    13
A11    5

表格数据示例:

 TABLE1
 ID    RANGE    SOURCE    PARENT
 A1                       A10
 A2                       A10
 A3                       A10
 A4                       A11
 A5                       A11
         2        A1         
         5        A2         
         6        A3         
         1        A4         
         4        A5         
 ---------------------------------
 TABLE2
 ID
 A10
 A11

2 个答案:

答案 0 :(得分:1)

我想你是说这样的话:

Select a1.parent as ID, sum(a2.range) as "SUM(RANGE)"
  From table1 a1 
  Left Join table1 a2 on ( a2.source = a1.id )
 Inner Join table2 b  on ( a1.parent =  b.id )
 Group By a1.parent
 Order By a1.parent;

其中包含self-join

Rextester Demo

答案 1 :(得分:1)

您可以尝试通过self-joinTABLE1IDSOURCE进行SUMGROUP BY

SELECT t1.parent,SUM(ts.range) as "SUM(RANGE)"
FROM TABLE1 t1 
JOIN TABLE1 ts on t1.ID = ts.SOURCE and t1.SOURCE IS NULL
WHERE  t1.parent in (SELECT ID FROM TABLE2) 
GROUP BY t1.parent