如何在having语句中使用一堆子句。神谕

时间:2015-08-12 03:27:40

标签: sql oracle

假设我有这样的查询:

nama_mhs_2015 like %s

我试过了两个,都没有用。

返回错误,第一个选择中没有group by,并且where不返回任何行。

3 个答案:

答案 0 :(得分:2)

首先你的问题有一些问题。

  • 我猜你的意思是别名a,b,c,d .... 而不是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

答案 1 :(得分: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中添加更多表格,并提供您想要的任何值,并通过在(C)中的C之后附加D,E,F,G等来相应地更改SQL。

上面的例子将导致2的输出,因为ID 2的A + B = 55且C = 23.A + B-C&gt;此记录为0,因此输出为2.

答案 2 :(得分:-1)

我相信你需要去掉那里的&#39;如果你仍然需要它,请将其移动。

所以它看起来像这样,

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

根据这个网站: http://www.w3schools.com/sql/sql_having.asp