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

#6 Fabián
29/12/2005 - 19:41 | Informe spam
Maxi,
concuerdo con vos.
Voy escribir la selección de los datos y veo como va.
Cuando haga el sp le agrego las variables año y mes. Las cuales se las paso
al sp en el RS.
Gracias

"Maxi" escribió:

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
#7 Maxi
29/12/2005 - 19:45 | Informe spam
Hola Fabian, ojo con las reglas de negocio, fijate bien donde las pones y
como, quizas debas separar la cosa en capas


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


"Fabián" escribió en el mensaje
news:
Maxi,
concuerdo con vos.
Voy escribir la selección de los datos y veo como va.
Cuando haga el sp le agrego las variables año y mes. Las cuales se las
paso
al sp en el RS.
Gracias

"Maxi" escribió:

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
#8 Fabián
29/12/2005 - 19:52 | Informe spam
Ok, Maxi.
Muchas gracias me haz ayudado mucho.
Saludos
Fabián

"Maxi" escribió:

Hola Fabian, ojo con las reglas de negocio, fijate bien donde las pones y
como, quizas debas separar la cosa en capas


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


"Fabián" escribió en el mensaje
news:
> Maxi,
> concuerdo con vos.
> Voy escribir la selección de los datos y veo como va.
> Cuando haga el sp le agrego las variables año y mes. Las cuales se las
> paso
> al sp en el RS.
> Gracias
>
> "Maxi" escribió:
>
>> 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
#9 Wilson R. Rico Camargo
29/12/2005 - 20:00 | Informe spam
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
#10 Wilson R. Rico Camargo
30/12/2005 - 15:49 | Informe spam
Maxi:

Lo que sugiero por la experienciea que llevo en manejo de bases de datos es
que no dejen que todo se procese o sobrecargue en una sentencia SQL, ya que
puede afectar el performance. Es mejor aplicar la logica del negocio en
procesos independientes que sean de facil mantenimiento ya que el dia de
mañana hay que pensar que puede cambiar las reglas de juego o lo que se
quiere mostrar y es más la carga para acomodar o desbaratar porque esta
afectando el rendimiento del servidor.

Uno puede generar estore procedure que con base en un select que traiga la
informacion necesaria se continue con todas las reglas de negocio que deben
tener. y en cuanto a tus puntos:

1. Sucede que SQL Server en la version 2000 no tiene un buen manejo con los
cursores en su rendimiento pero en la 2005 mejoraron y considero que estos
cursores tienen un comportamiento casi similar a un recordset de ado, osea
que mira el alcance que puedes sacar de ahi.
2. Estoy de acuerdo en que en lo posible no se utilicen las tablas
temporales pero esta bondad que tiene SQL Server con las tablas # hasta
cierto punto pueden ayudar en los procesos que se pueden llegar a tener.
3. Considero que una base de datos no es solo un reporsitorio de datos y
objetos, pero en lo posible la logica del negocio debe tomarse en la
aplicacion. Claro uno puede crear procedimientos y function que ayuden en la
extraccion de los datos y ciertas operaciones las dejemos para que se corran
en el servidor. pero debemos contar con que la parte cliente digiera la
informacion como la necesita y no afecte el servicio del servidos en otros
procesos. En la version 2005 de SQL Server se cuenta hasta con
procedimientos que se pueden guardar en el lenguaje que uno trabaje con .Net
y esto algo que se debe saer explotar.

Las aplicaciones que yo trabajo almaceno la parametrizacion y las reglas del
negocio como expresion que despues se evaluan asi exploto SQL Server y
Exploto .Net.

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


"Maxi" escribió en el mensaje
news:uiP5$
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
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida