Consulta TSQL

28/12/2005 - 18:52 por anonimo | Informe spam
Hola comuna, la pregunta es la siguiente:
Tengo dos tablas:
Tabla1: codalumno, nomalumno
Tabla2: numreg, codalumno, estado, otrocampo

Lo primero que quería hacer era tener el conjunto de registros de la tabla1
mas el numero de veces que aparecia en la tabla2:
SELECT o.codalumno, nomalumno, count(p.numreg) as numero
FROM Tabla1 O
LEFT OUTER JOIN Tabla2 P ON P.codalumno=O.codalumno
group by o.codalumno, nomalumno
Esta consulta me devuelve los datos que necesito, hasta ahi todo bien, pero
ahora lo que se quiere es que se devuelva el conjunto de los registros de la
tabla1 mas dos columnas adicionales, una columna en la que se sume los
registros en la que el campo 'estado' de la tabla2 sea igual a '1' y la otra
columna la suma de registros en la que el campo sea igual a '2' para cada
registro de alumno.
Me podrían decir la forma mas eficiente de hacerlo por favor, yo habia
pensado hacerlo asi, pero creo que no es la mejor manera:
SELECT o.codalumno, nomalumno
, (select count(numreg) from Tabla2 where estado='1' and
codalumno=o.codalumno)
, (select count(numreg) from Tabla2 where estado='2' and
codalumno=o.codalumno)
FROM Tabla1 O
LEFT OUTER JOIN Tabla2 P ON P.codalumno=O.codalumno
group by o.codalumno, nomalumno

Gracias.

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
28/12/2005 - 19:16 | Informe spam
Usa la expresion "case" en conjunto con la funcion de grupo "sum".

SELECT
o.codalumno,
o.nomalumno,
sum(case when p.estado = 1 then 1 else 0 end) as sum_estado_1,
sum(case when p.campo = 2 then 1 else 0 end) as sum_campo_2
FROM
dbo.Tabla1 O
LEFT OUTER JOIN
dbo.Tabla2 P
ON P.codalumno=O.codalumno
group by
o.codalumno, o.nomalumno
go


AMB

"anonimo" wrote:

Hola comuna, la pregunta es la siguiente:
Tengo dos tablas:
Tabla1: codalumno, nomalumno
Tabla2: numreg, codalumno, estado, otrocampo

Lo primero que quería hacer era tener el conjunto de registros de la tabla1
mas el numero de veces que aparecia en la tabla2:
SELECT o.codalumno, nomalumno, count(p.numreg) as numero
FROM Tabla1 O
LEFT OUTER JOIN Tabla2 P ON P.codalumno=O.codalumno
group by o.codalumno, nomalumno
Esta consulta me devuelve los datos que necesito, hasta ahi todo bien, pero
ahora lo que se quiere es que se devuelva el conjunto de los registros de la
tabla1 mas dos columnas adicionales, una columna en la que se sume los
registros en la que el campo 'estado' de la tabla2 sea igual a '1' y la otra
columna la suma de registros en la que el campo sea igual a '2' para cada
registro de alumno.
Me podrían decir la forma mas eficiente de hacerlo por favor, yo habia
pensado hacerlo asi, pero creo que no es la mejor manera:
SELECT o.codalumno, nomalumno
, (select count(numreg) from Tabla2 where estado='1' and
codalumno=o.codalumno)
, (select count(numreg) from Tabla2 where estado='2' and
codalumno=o.codalumno)
FROM Tabla1 O
LEFT OUTER JOIN Tabla2 P ON P.codalumno=O.codalumno
group by o.codalumno, nomalumno

Gracias.
Respuesta Responder a este mensaje
#2 anonimo
28/12/2005 - 20:38 | Informe spam
Funciona perfecto.
Muchas gracias.

"Alejandro Mesa" escribió:

Usa la expresion "case" en conjunto con la funcion de grupo "sum".

SELECT
o.codalumno,
o.nomalumno,
sum(case when p.estado = 1 then 1 else 0 end) as sum_estado_1,
sum(case when p.campo = 2 then 1 else 0 end) as sum_campo_2
FROM
dbo.Tabla1 O
LEFT OUTER JOIN
dbo.Tabla2 P
ON P.codalumno=O.codalumno
group by
o.codalumno, o.nomalumno
go


AMB

"anonimo" wrote:

> Hola comuna, la pregunta es la siguiente:
> Tengo dos tablas:
> Tabla1: codalumno, nomalumno
> Tabla2: numreg, codalumno, estado, otrocampo
>
> Lo primero que quería hacer era tener el conjunto de registros de la tabla1
> mas el numero de veces que aparecia en la tabla2:
> SELECT o.codalumno, nomalumno, count(p.numreg) as numero
> FROM Tabla1 O
> LEFT OUTER JOIN Tabla2 P ON P.codalumno=O.codalumno
> group by o.codalumno, nomalumno
> Esta consulta me devuelve los datos que necesito, hasta ahi todo bien, pero
> ahora lo que se quiere es que se devuelva el conjunto de los registros de la
> tabla1 mas dos columnas adicionales, una columna en la que se sume los
> registros en la que el campo 'estado' de la tabla2 sea igual a '1' y la otra
> columna la suma de registros en la que el campo sea igual a '2' para cada
> registro de alumno.
> Me podrían decir la forma mas eficiente de hacerlo por favor, yo habia
> pensado hacerlo asi, pero creo que no es la mejor manera:
> SELECT o.codalumno, nomalumno
> , (select count(numreg) from Tabla2 where estado='1' and
> codalumno=o.codalumno)
> , (select count(numreg) from Tabla2 where estado='2' and
> codalumno=o.codalumno)
> FROM Tabla1 O
> LEFT OUTER JOIN Tabla2 P ON P.codalumno=O.codalumno
> group by o.codalumno, nomalumno
>
> Gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida