Nuevamente con mi select

27/09/2005 - 14:48 por Don | Informe spam
Gracias a los que me respondieron, vamos a ver si lo que quiero en realidad
se llama select anidado...

Tengo dos tablas : Tabla_1 y Tabla_2
En tabla_1 tengo un listado de abogados y en Tabla_2 un listado de los
negocios que lleva cada uno de los abogados de Tabla_1 pero pueden haber
abogado que no tienen negocios y por lo tanto no aparecen en Tabla_2. Estos
Negocios estan clasificados y la consulta la debo hacer por un tipo de
negocio especifico y por un horario asignado a cada abogado, por ejemplo
tipo 1, horario actual, Dia 2. El resultado que necesito es este:

TABLA_HORARIOS
Codigo HoraEntrada HoraSalida
1 8:00 a.m. 12:00 p.m.

TABLA_1
Codigo Nombre CodHorario CodDia
10 Luis 1 2
15 Carlos 1 2
20 Pedro 1 2
22 Juan 1 2

TABLA_2
CodAbogado CodNegocio CodTipoNegocio
15 150 1
15 151 1
15 152 2
10 153 3
10 154 1
20 155 1

TABLA_RESULTADO_DE_LA_CONSULTA
CodAbogado NumeroDeNegociosTipo_1
10 1
15 2
20 1
22 0

La consulta que estoy utilizando es esta:

SELECT SubSelect.Codigo, count(Tabla_2.CodNegocio) NumeroRegistros
FROM Tabla_2, (SELECT Tabla_1.Codigo FROM Tabla_1, Tabla_Horarios WHERE
Convert(varchar, Tabla_Horarios.HoraEntrada,8) < Convert(varchar,
@HoraActual,8) AND Convert(varchar, Tabla_Horarios.HoraSalida,8) >
Convert(varchar, @HoraActual,8) AND Tabla_Horarios.Codigo Tabla_1.CodHorario AND Tabla_1.CodDia = @CodDia) As SubSelect
WHERE Tabla_1.Codigo = Tabla_2.CodAbogado AND Tabla_2.CodTipo = @CodTipo
GROUP BY Tabla_2.CodNegocio, SubSelect.Codigo

Pero unicamente me muestra los abogados que ya tienen negocios, necesitos la
lista completa de abogados y los que aun no tienen negocios pues que me
muestre cero.

No he podido hacer funcionar esta consulta como necesito, agradesco
muchisimo cualquier consejo o aporte !!!!

MIL GRACIAS !!!
 

Leer las respuestas

#1 Alejandro Mesa
27/09/2005 - 15:46 | Informe spam
Trata:

create table TABLA_HORARIOS (
Codigo int,
HoraEntrada varchar(25),
HoraSalida varchar(25)
)
go

insert into TABLA_HORARIOS values(1, '08:00:00', '12:00:00')
go

create table TABLA_1 (
Codigo int,
Nombre varchar(50),
CodHorario int,
CodDia int
)
go

insert into TABLA_1 values(10, 'Luis', 1, 2)
insert into TABLA_1 values(15, 'Carlos', 1, 2)
insert into TABLA_1 values(20, 'Pedro', 1, 2)
insert into TABLA_1 values(22, 'Juan', 1, 2)
go

create table TABLA_2 (
CodAbogado int,
CodNegocio int,
CodTipoNegocio int
)
go

insert into TABLA_2 values(15, 150, 1)
insert into TABLA_2 values(15, 151, 1)
insert into TABLA_2 values(15, 152, 2)
insert into TABLA_2 values(10, 153, 3)
insert into TABLA_2 values(10, 154, 1)
insert into TABLA_2 values(20, 155, 1)
go

declare @HoraActual varchar(25)
declare @CodDia int
declare @CodTipo int

set @HoraActual = '09:00:00'
set @CodDia = 2
set @CodTipo = 1

select
a.Codigo as CodAbogado,
count(n.CodNegocio) as NumeroDeNegociosTipo_1
from
TABLA_1 as a
left join
TABLA_HORARIOS as h
on a.CodHorario = h.Codigo
left join
TABLA_2 as n
on a.Codigo = n.CodAbogado
where
cast('1900-01-01T' + @HoraActual as datetime) between cast('1900-01-01T' +
h.HoraEntrada as datetime) and cast('1900-01-01T' + h.HoraSalida as datetime)
and a.CodDia = @CodDia
and n.CodTipoNegocio = @CodTipo
group by all
a.Codigo
go

go

Como habras notado, estoy almacenando el tiempo con el formato hh:mm:ss,
donde hh es la hora en formato militar (24 horas). De esta forma puedo
convertir de varchar a datetime y usar el operador "between".


AMB

"Don" wrote:

Gracias a los que me respondieron, vamos a ver si lo que quiero en realidad
se llama select anidado...

Tengo dos tablas : Tabla_1 y Tabla_2
En tabla_1 tengo un listado de abogados y en Tabla_2 un listado de los
negocios que lleva cada uno de los abogados de Tabla_1 pero pueden haber
abogado que no tienen negocios y por lo tanto no aparecen en Tabla_2. Estos
Negocios estan clasificados y la consulta la debo hacer por un tipo de
negocio especifico y por un horario asignado a cada abogado, por ejemplo
tipo 1, horario actual, Dia 2. El resultado que necesito es este:

TABLA_HORARIOS
Codigo HoraEntrada HoraSalida
1 8:00 a.m. 12:00 p.m.

TABLA_1
Codigo Nombre CodHorario CodDia
10 Luis 1 2
15 Carlos 1 2
20 Pedro 1 2
22 Juan 1 2

TABLA_2
CodAbogado CodNegocio CodTipoNegocio
15 150 1
15 151 1
15 152 2
10 153 3
10 154 1
20 155 1

TABLA_RESULTADO_DE_LA_CONSULTA
CodAbogado NumeroDeNegociosTipo_1
10 1
15 2
20 1
22 0

La consulta que estoy utilizando es esta:

SELECT SubSelect.Codigo, count(Tabla_2.CodNegocio) NumeroRegistros
FROM Tabla_2, (SELECT Tabla_1.Codigo FROM Tabla_1, Tabla_Horarios WHERE
Convert(varchar, Tabla_Horarios.HoraEntrada,8) < Convert(varchar,
@HoraActual,8) AND Convert(varchar, Tabla_Horarios.HoraSalida,8) >
Convert(varchar, @HoraActual,8) AND Tabla_Horarios.Codigo > Tabla_1.CodHorario AND Tabla_1.CodDia = @CodDia) As SubSelect
WHERE Tabla_1.Codigo = Tabla_2.CodAbogado AND Tabla_2.CodTipo = @CodTipo
GROUP BY Tabla_2.CodNegocio, SubSelect.Codigo

Pero unicamente me muestra los abogados que ya tienen negocios, necesitos la
lista completa de abogados y los que aun no tienen negocios pues que me
muestre cero.

No he podido hacer funcionar esta consulta como necesito, agradesco
muchisimo cualquier consejo o aporte !!!!

MIL GRACIAS !!!



Preguntas similares