Как выбрать значение из одной строки в подзапросе select, затем выбрать значение в следующей строке и т. Д.? - PullRequest
0 голосов
/ 06 ноября 2018

Что касается моего примера, я пытаюсь добавить значения столбца RANGE для нескольких строк в TABLE1, где значение столбца SOURCE каждой из этих строк равно значению столбца ID различных строк в TABLE1, для которых значение столбца PARENT равно эти разные строки равны значению столбца ID в TABLE2. Я нарисовал диаграмму сортов, чтобы наглядно показать это тоже.

Diagram of sorts

У меня возникают проблемы при выборе только одного значения строки TABLE2.ID для подключения к подзапросу Select, затем основной выбор нужно запускать снова и снова, используя значение TABLE2.ID следующего ряда. В каждой таблице тысячи строк. Я играл с извлечением и отставанием, но я действительно недостаточно осведомлен, чтобы понять это в настоящее время. Я все еще изучаю, как .... Как есть ниже, я полагаю, что он хочет добавить все значения RANGE всех строк TABLE1, так как идентификатор выбора подзапроса читает все строки в 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 голосов
/ 06 ноября 2018

Вы можете попробовать self-join в TABLE1 на ID и SOURCE, и сделать SUM и GROUP 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
0 голосов
/ 06 ноября 2018

Полагаю, вы имеете в виду такое утверждение:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...