¿Cómo fusionar registros de dos tablas usando grupo por cláusula en Oracle?

Tengo dos mesas ward1 y ward2ie;

create table ward1
(
ward_id int
)

create table ward2
(
ward_id int,
ward_name varchar(10)
)

y los valores son --

insert into ward1 values(101);
insert into ward1 values(101);
insert into ward1 values(102);
insert into ward1 values(102);
insert into ward1 values(102);

insert into ward2 values(101,'child');
insert into ward2 values(102,'General');

Entonces, necesito producir el número total de ocurrencias de ward_id. Fue simple para mí, usé este código.

SELECT ward_id, count(ward_id) as "No of occurrence" from ward1 group by ward_id;

la salida fue --

ward_id   No of occurrence
101       2
102       3

estos son los registros de la tabla ward1, pero cuando quiero ward_name de la tabla ward2. Estoy recibiendo un error. Este es mi código--

select ward1.ward_id as "ward_id",ward2.ward_name,
count(ward1.ward_id)as "No of occurrence" from ward1,
ward2 group by ward1.ward_id,ward2.ward_name 
having ward1.ward_id=ward2.ward_id;

Dice que no es un grupo por expresión...

Quiero mostrarme así--

ward_id   ward_name    No of occurrence
101       child        2
102       General      3

Por favor, ayuda ....

preguntado el 10 de marzo de 12 a las 14:03

3 Respuestas

Cerca. Realmente solo necesita unir las 2 tablas en una cláusula where (o usar la declaración "join" preferida)

select ward1.ward_id as "ward_id",ward2.ward_name,
count(ward1.ward_id)as "No of occurrence" 
from ward1,ward2 
where ward1.ward_id = ward2.ward_id
group by ward1.ward_id,ward2.ward_name;

respondido 10 mar '12, 14:03

Oh, sí, eso estuvo cerca. Gracias. - ceniza dmc4

No quieres el HAVING cláusula aquí, solo use un WHERE cláusula para vincular sus tablas:

select ward1.ward_id as "ward_id",
       ward2.ward_name,
       count(ward1.ward_id) as "No of occurrence" 
  from ward1,
       ward2
 WHERE ward1.ward_id = ward2.ward_id
 group by ward1.ward_id,
          ward2.ward_name;

Realmente debería usar la sintaxis SQL-92 en lugar de SQL-86, luego solo necesita agregar el JOIN condición:

select ward_id,
       ward2.ward_name,
       count(ward_id) as "No of occurrence" 
  from ward1
 INNER JOIN ward2 USING (ward_id)
 group by ward_id,
          ward2.ward_name;

Espero que ayude ...

respondido 10 mar '12, 14:03

select ward1.ward_id as "ward_id",
       ward2.ward_name,
       count(ward1.ward_id) as "No of occurrence"
from   ward1, ward2
where  ward1.ward_id = ward2.ward_id
group by ward1.ward_id,ward2.ward_name;

respondido 10 mar '12, 14:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.