2015-08-12 3 views
-1

Предположим, у меня есть запрос, как это:Как использовать кучу предложения в инструкции. Oracle

SELECT table1.id 
FROM (
     SELECT id, sum(column) as A 
     FROM table1 
     GROUP BY id 
    ) a1 
Left join (
     SELECT id, 
     sum(column) as B 
     FROM table 2 
     GROUP BY Id 
    ) a2 
    on table1.id=table2.id 

. 

. 

. 

. 

Left join (
      SELECT id, sum(column) as G 
      FROM table 7 
      GROUP BY id 
     ) g1 
      on table1.id=table7.id 

Having or where A+B - (C+D+E+F+G) >0 

Я пытался как, никто не работает.

Ошибка возврата при отсутствии группы в первом выборе и где не возвращаются никакие строки.

ответ

1

Хуан имеет правильный ответ. Я просто добавляю SQLFiddle, чтобы укрепить его ответ. Пожалуйста, посмотрите на меньший экземпляр этого же решения здесь: http://sqlfiddle.com/#!4/81c275/1

Столы

create table table1(id int, col int); 
insert into table1 values (1, 10); 
insert into table1 values (2, 20); 
insert into table1 values (2, 30); 

create table table2(id int, col int); 
insert into table2 values (1, 5); 
insert into table2 values (2, 3); 
insert into table2 values (2, 2); 

create table table3(id int, col int); 
insert into table3 values (1, 100); 
insert into table3 values (2, 20); 
insert into table3 values (2, 3); 

SQL

select a1.id 
from (select id, sum(col) as A from table1 group by id) a1 
left join (select id, sum(col) as B from table2 group by id) a2 
    on a1.id = a2.id 
left join (select id, sum(col) as C from table3 group by id) a3 
    on a1.id = a3.id 
where A + B - (C) > 0 

Вы можете добавить несколько таблиц в SQLFiddle с любыми значениями, пожалуйста, , и соответственно измените SQL, добавив D, E, F, G и т. д. после C в (C).

Приведенный выше пример приведет к выходу 2, так как в ID 2 A + B = 55, С = 23. А + ВС> 0 для этой записи и, следовательно, на выходе будет 2.

-1

Я считаю, что вам нужно вынуть «где» и переместить его, если вам все еще нужно.

Так что это будет выглядеть примерно так,

select table1.id from(
... 
... 
...) 
Having ((A+B)-(C+D+R+F+G)>0) 

Согласно сайту: http://www.w3schools.com/sql/sql_having.asp

+0

я знаю, как использовать но это немного отличается – Ariox66

2

Первый ваш вопрос есть некоторые проблемы.

  • Я собираюсь думаю, вы имеете в виду поместить псевдоним а, б, в, г .... вместо a1, a2, g1.

  • Также ваше левое соединение должно быть чем-то вроде a.id = b.id на момент создания подзапроса, для которого вы должны использовать псевдоним вместо tablename.

Если вы фиксируете, что вы должны добавить WHERE, я также предполагаю, что вы имеете в виду использовать SUM() результат

WHERE a.A + b.B - (c.C+ d.D+ e.E+ f.F+ g.G) > 0 

.

SELECT a.id 
FROM (
     SELECT id, sum(column) as sumA 
     FROM table1 
     GROUP BY id 
    ) a 
Left join 
    (
     SELECT id, sum(column) as sumB 
     FROM table 2 
     GROUP BY Id 
    ) b 
    on a.id = b.id 

.  

. 

. 

. 

Left join 
     (
     SELECT id, sum(column) as sumG 
     FROM table 2 
     GROUP BY id 
    ) g 
     on f.id = g.id 

WHERE a.sumA + b.sumB - (c.sumC + d.sumD + e.sumE + f.sumF + g.sumG) >0 
+0

Не работает, потому что нет группы. Где результаты не возвращаются. Когда я положил A, B, .., G в select и вычислил формулу в excel, есть 500 строк. – Ariox66

+0

см. Мой запрос на запрос, который я просто добавляю. –

+0

Дорогой carlos, как ваш ответ отличается от моего вопроса? Моя проблема заключается не в псевдониме или использовании более лучших имен. Это всего лишь пример – Ariox66

Смежные вопросы