繁体   English   中英

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

[英]In a select sub query, how to select a value from one row, then select a value from the next row, and so forth?

与我的示例相关,我试图在 TABLE1 中添加多行的 RANGE 列值,其中每一行的 SOURCE 列值等于 TABLE1 中不同行的 ID 列值,其中这些不同行的 PARENT 列值等于 TABLE2 中的 ID 列值。 我也画了一个图表来直观地显示这一点。

排序图

我在一次只选择一行 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

我想你的意思是这样的声明:

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

雷克斯特演示

您可以尝试通过IDSOURCETABLE1 self-join ,并执行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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM