Select con campos calculados

29/12/2005 - 17:03 por Fabián | Informe spam
Hola listeros, tengo una duda respecto a campos calculados en un select.
En resumen necesito mostrar las cantidades de prestaciones menos las
cantidades de prestaciones que cumplan algunas condiciones para ello y a modo
de ejemplo pongo esta sentencia.
Select año,mes,medicos,sum(cantidad) ,calculado from tabla t inner join
(select medicos,sum(cantidad) as Calculado from tabla group by
año,mes,medicos,afiliado
having sum(cantidad)>2)
group by año,mes,medicos )as c
on
t.medicos=c.medicos
Otro criterio es que el grupo familiar haya tenido mas de 4 consultas
Para ello selecciono de esta forma.
select medicos,sum(cantidad) as Calculado1 from tabla group by
año,mes,medicos,substring(afiliado,1,9)
having sum(cantidad)>4)

El tema es que aparte tengo otros criteros que tener en cuenta los cuales me
interesan ponerlos como columnas del primer select para poder restar la
cantidad original de las calculadas de los subqueries.
Esto es factible? Alguna sugerencia.

Saludos
Fabián

Preguntas similare

Leer las respuestas

#1 Maxi
29/12/2005 - 18:49 | Informe spam
Hola Fabian, claro que es factible y lo estas haciendo bien, las otras
condiciones las puedes poner dentro de la tabla derivada (si es que son de
ella) o fuera.

Seria bueno saber bien que condiciones son asi te podemos ayudar mejor :-)


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Fabián" escribió en el mensaje
news:
Hola listeros, tengo una duda respecto a campos calculados en un select.
En resumen necesito mostrar las cantidades de prestaciones menos las
cantidades de prestaciones que cumplan algunas condiciones para ello y a
modo
de ejemplo pongo esta sentencia.
Select año,mes,medicos,sum(cantidad) ,calculado from tabla t inner join
(select medicos,sum(cantidad) as Calculado from tabla group by
año,mes,medicos,afiliado
having sum(cantidad)>2)
group by año,mes,medicos )as c
on
t.medicos=c.medicos
Otro criterio es que el grupo familiar haya tenido mas de 4 consultas
Para ello selecciono de esta forma.
select medicos,sum(cantidad) as Calculado1 from tabla group by
año,mes,medicos,substring(afiliado,1,9)
having sum(cantidad)>4)

El tema es que aparte tengo otros criteros que tener en cuenta los cuales
me
interesan ponerlos como columnas del primer select para poder restar la
cantidad original de las calculadas de los subqueries.
Esto es factible? Alguna sugerencia.

Saludos
Fabián
Respuesta Responder a este mensaje
#2 Maxi
29/12/2005 - 19:07 | Informe spam
Hola, perdon no, pero no coincido contigo: es cierto que los campos
calculados ayudan y mucho pero no siempre es bueno tenerlos, hay veces que
para una sola query necesito un calculo y no voy a tener un campo calculado
para eso.
Muchos menos coincido con tu segunda parte no:

calculos sean minimizados y crear procedimientos que evaluen los valores
ya sea recorreindo cursores, variables temporales, vistas, tablas
temporales o que sean evaluadas en el back (aplicacion).



Todo esto es una enorme mala practica de programacion:

1) No hay que usar cursores a menos para herramientas de DBA
2) Hay que minimizar las tablas temporales lo maximo posible
3) eso de que deba todo ser evaluado en la aplicacion tampoco es tan asi,
podrias tener lo mas bien tu BL dentro de SQL2005 en un Assembly y que este
se dedique a las evaluaciones



Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Wilson R. Rico Camargo" escribió en el
mensaje news:
Lo que sucede es que debes procurar que los calculos no se armen o se
resuelvan en el mismo Select para que te llegan más depurados porque estas
arriegando performance de la base de datos. debes establecer que estos
calculos sean minimizados y crear procedimientos que evaluen los valores
ya sea recorreindo cursores, variables temporales, vistas, tablas
temporales o que sean evaluadas en el back (aplicacion).
Cordialmente,


Wilson R. Rico Camargo
BBVA Seguros
Bogotá - Colombia

(Oficina (571) 2191100 Ext. 1140
Móvil 300-2076572: Mensajes instantáneos
Visite www.bbvaseguros.com.co


"Fabián" escribió en el mensaje
news:
Hola listeros, tengo una duda respecto a campos calculados en un select.
En resumen necesito mostrar las cantidades de prestaciones menos las
cantidades de prestaciones que cumplan algunas condiciones para ello y a
modo
de ejemplo pongo esta sentencia.
Select año,mes,medicos,sum(cantidad) ,calculado from tabla t inner join
(select medicos,sum(cantidad) as Calculado from tabla group by
año,mes,medicos,afiliado
having sum(cantidad)>2)
group by año,mes,medicos )as c
on
t.medicos=c.medicos
Otro criterio es que el grupo familiar haya tenido mas de 4 consultas
Para ello selecciono de esta forma.
select medicos,sum(cantidad) as Calculado1 from tabla group by
año,mes,medicos,substring(afiliado,1,9)
having sum(cantidad)>4)

El tema es que aparte tengo otros criteros que tener en cuenta los cuales
me
interesan ponerlos como columnas del primer select para poder restar la
cantidad original de las calculadas de los subqueries.
Esto es factible? Alguna sugerencia.

Saludos
Fabián




Respuesta Responder a este mensaje
#3 Fabián
29/12/2005 - 19:28 | Informe spam
Ante todo muchas gracias a ambos,
Maxi,
Efectivamente las otras condiciones son de la misma tabla.
Actualmente como no sabía bien si lo podía hacer.
A cada una de las condiciones que tengo que evaluar las transforme en un
store procedure en el cual devuelvo los valores que despues los pasaba a
excel. Estando en excel lo sumo y resto dependiendo el caso.
Tengo que pensar como a esto lo pongo en el reporting services para que me
de una columna con el resultado de las operaciones de resta entre el valor
principal menos todas las condiciones (restricciones) que hay que aplicarle.
Desde ya muchas gracias como siempre por tu colaboración.
Saludos cordiales
Fabián

"Maxi" escribió:

Hola Fabian, claro que es factible y lo estas haciendo bien, las otras
condiciones las puedes poner dentro de la tabla derivada (si es que son de
ella) o fuera.

Seria bueno saber bien que condiciones son asi te podemos ayudar mejor :-)


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Fabián" escribió en el mensaje
news:
> Hola listeros, tengo una duda respecto a campos calculados en un select.
> En resumen necesito mostrar las cantidades de prestaciones menos las
> cantidades de prestaciones que cumplan algunas condiciones para ello y a
> modo
> de ejemplo pongo esta sentencia.
> Select año,mes,medicos,sum(cantidad) ,calculado from tabla t inner join
> (select medicos,sum(cantidad) as Calculado from tabla group by
> año,mes,medicos,afiliado
> having sum(cantidad)>2)
> group by año,mes,medicos )as c
> on
> t.medicos=c.medicos
> Otro criterio es que el grupo familiar haya tenido mas de 4 consultas
> Para ello selecciono de esta forma.
> select medicos,sum(cantidad) as Calculado1 from tabla group by
> año,mes,medicos,substring(afiliado,1,9)
> having sum(cantidad)>4)
>
> El tema es que aparte tengo otros criteros que tener en cuenta los cuales
> me
> interesan ponerlos como columnas del primer select para poder restar la
> cantidad original de las calculadas de los subqueries.
> Esto es factible? Alguna sugerencia.
>
> Saludos
> Fabián



Respuesta Responder a este mensaje
#4 Maxi
29/12/2005 - 19:32 | Informe spam
Hola, yo armaria todo eso en un SP porque por lo que decis no dejan de ser
sumas o restas. Y desde RS lo llamo :-)


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Fabián" escribió en el mensaje
news:
Ante todo muchas gracias a ambos,
Maxi,
Efectivamente las otras condiciones son de la misma tabla.
Actualmente como no sabía bien si lo podía hacer.
A cada una de las condiciones que tengo que evaluar las transforme en un
store procedure en el cual devuelvo los valores que despues los pasaba a
excel. Estando en excel lo sumo y resto dependiendo el caso.
Tengo que pensar como a esto lo pongo en el reporting services para que me
de una columna con el resultado de las operaciones de resta entre el valor
principal menos todas las condiciones (restricciones) que hay que
aplicarle.
Desde ya muchas gracias como siempre por tu colaboración.
Saludos cordiales
Fabián

"Maxi" escribió:

Hola Fabian, claro que es factible y lo estas haciendo bien, las otras
condiciones las puedes poner dentro de la tabla derivada (si es que son
de
ella) o fuera.

Seria bueno saber bien que condiciones son asi te podemos ayudar mejor
:-)


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Fabián" escribió en el mensaje
news:
> Hola listeros, tengo una duda respecto a campos calculados en un
> select.
> En resumen necesito mostrar las cantidades de prestaciones menos las
> cantidades de prestaciones que cumplan algunas condiciones para ello y
> a
> modo
> de ejemplo pongo esta sentencia.
> Select año,mes,medicos,sum(cantidad) ,calculado from tabla t inner
> join
> (select medicos,sum(cantidad) as Calculado from tabla group by
> año,mes,medicos,afiliado
> having sum(cantidad)>2)
> group by año,mes,medicos )as c
> on
> t.medicos=c.medicos
> Otro criterio es que el grupo familiar haya tenido mas de 4 consultas
> Para ello selecciono de esta forma.
> select medicos,sum(cantidad) as Calculado1 from tabla group by
> año,mes,medicos,substring(afiliado,1,9)
> having sum(cantidad)>4)
>
> El tema es que aparte tengo otros criteros que tener en cuenta los
> cuales
> me
> interesan ponerlos como columnas del primer select para poder restar la
> cantidad original de las calculadas de los subqueries.
> Esto es factible? Alguna sugerencia.
>
> Saludos
> Fabián



Respuesta Responder a este mensaje
#5 Fabián
29/12/2005 - 19:38 | Informe spam
Los criterios que tengo que evaluar son:
1) El médico no puede atender a más de 15 afiliados por día.
2) Un afiliado no puede tener más de 2 consultas por día
3) Un mismo grupo familiar no puede tener más de 4 consultas por día
y 4) El profesional debe estar registrado en un padrón.
Para la primera condición hago el group by por año,mes,día y afiliado
Para la segunda condición hago el group by por año,mes,día,afiliado
Para la tercera condicion hago el group by por año,mes,día y el
substring(afiliado,1,9) y el having sum(práctica)
Y para la cuarta condicion seleccionar de la tabla medicos aquellos que
están en la misma. Es decir select medico from tabla1 inner join tabla2 y de
esos realizo la suma de las practicas solicitadas. A esta suma tengo que
restarles las cantidades que me dan como resultado los criterios antes
citados.

Fabián

"Fabián" escribió:

Hola listeros, tengo una duda respecto a campos calculados en un select.
En resumen necesito mostrar las cantidades de prestaciones menos las
cantidades de prestaciones que cumplan algunas condiciones para ello y a modo
de ejemplo pongo esta sentencia.
Select año,mes,medicos,sum(cantidad) ,calculado from tabla t inner join
(select medicos,sum(cantidad) as Calculado from tabla group by
año,mes,medicos,afiliado
having sum(cantidad)>2)
group by año,mes,medicos )as c
on
t.medicos=c.medicos
Otro criterio es que el grupo familiar haya tenido mas de 4 consultas
Para ello selecciono de esta forma.
select medicos,sum(cantidad) as Calculado1 from tabla group by
año,mes,medicos,substring(afiliado,1,9)
having sum(cantidad)>4)

El tema es que aparte tengo otros criteros que tener en cuenta los cuales me
interesan ponerlos como columnas del primer select para poder restar la
cantidad original de las calculadas de los subqueries.
Esto es factible? Alguna sugerencia.

Saludos
Fabián
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida