Sql consulta

Hola deseo generar una consulta de la siguiente manera que me genera l siguiente reporte ok:
Día. Gestantes,-partos, - abortos,-negativos, -rastro,-ins sobre preñez, + dig positivos total
así quiero que sea mi reporte.
Tengo tres tablas
Una es vacas_gestantes con un int que tiene el numero de vacas del día 1ero o con lo que se cerro el mes,
la otra tabla es partos donde manejo fecha, abortos, total de partos
tabla de inseminacion_vacas donde tengo fecha diag_postivios y diag_ negativos
y la tabla rastro donde manejo la fecha también
deseo geerar el reporte al día. Como seria mi consulta
ya que se restarían
por decir día 3 1450 vacas gestantes, 3 partos, 1 aborto, 1 diag_negativo, 2 rastro, 2 inseminacion_preñez y 4 positivos
debería de ser total = 1445
como le hago gracias :D

1 respuesta

Respuesta
1
¿Podrías pasarme las estructuras completas de tus tablas?
Ok mira
la tabla rastro VACAID int ,  LACTANCIA int , DLECHE int ,  KILOGRAMOS  float    COMPRADOR  char    PRECIO float,    C_CORPORAL char    CAUSA    char            ESTADO  char
tabla inseminacion vacas  d_positivos int, d_negativos int, abortos int, inseminados int, fecha smalldatitme,
vacas_gestantes  numero_gestantes int
En ambas ocasiones me pasaste estructuras diferentes... pero de todos modos intentare ayudarte... veo que la tabla de inseminación tiene ya los totales por fecha por lo tanto se puso fácil.
dia<span style="white-space: pre;"> </span>vacas_gest<span style="white-space: pre;"> </span>partos<span style="white-space: pre;"> </span>abortos<span style="white-space: pre;"> </span>negat<span style="white-space: pre;"> </span>rastro<span style="white-space: pre;"> </span>ins<span style="white-space: pre;"> </span>posit<span style="white-space: pre;"> </span>total
01/08/10<span style="white-space: pre;"> </span>1450<span style="white-space: pre;"> </span>3<span style="white-space: pre;"> </span>1<span style="white-space: pre;"> </span>1<span style="white-space: pre;"> </span>2<span style="white-space: pre;"> </span>2<span style="white-space: pre;"> </span>4<span style="white-space: pre;"> </span>1445
select ins.fecha, vg.numero_gestantes, ins.partos, ins.abortos, ins.d_negativos, isnull((select count(*) from rastro r where r.fecha = ins.fecha),0) as rastro, ins.inseminados, ins.d_positivos, /*y para el total pues lo haríamos de la sgte manera*/ (vg.numero_gestantes - ins.partos - ins.abortos - ins.d_negativos - isnull((select count(*) from rastro r where r.fecha = ins.fecha),0) - ins.inseminados + ins.d_positivos) as total from vacas_gestantes vg, inseminacion_vacas ins
Espero te haya servido, no dudes en consultar si tienes alguna duda más
Pero como le hago para que me cambie con el resultado el numero_gestantes, por que para el otro día, es como se debe de realizar el proceso. Gracias. Y en rastro no manejo campo fecha.?
fecha                                                  numero_gestantes totalpartos abortos     dnegativos  total      
------------------------------------------------------ ---------------- ----------- ----------- ----------- -----------
2010-08-11 00:00:00 1500 3 1 2 1491
2010-08-11 00:00:00 1500 6 1 2 1488
2010-08-11 00:00:00 1500 8 1 2 1486
2010-08-19 00:00:00 1500 3 1 2 1490
2010-08-19 00:00:00 1500 6 1 2 1487
2010-08-19 00:00:00 1500 8 1 2 1485
Ese es el resuñltado que me da al hacer la consulta pero yo quiere que me lo de en un solo renglón los datos, con la fecha.. gracias :D
como doi lata vrdd aahahaa
1) Bueno primero que nada, ya antes te lo quería preguntar, en que consiste la tabla rastros, la utilizas para registrar ventas, ¿o algún tipo de movimiento de las vacas? Porque si es así me parece necesario que tenga una fecha o algún otro campo con el cual asociar para poder quitar la cantidad que se utilizará para restarla de numero_gestantes.
Ahora bien sigamos con lo que tenemos
select ins.fecha, 
( select vg.numero_gestantes from vacas_gestantes vg) as numero_gestantes,
ins. Partos,
ins. Abortos,
ins. D_negativos,
isnull((select count(*) from rastro), 0) as rastro,
ins. Inseminados,
ins.d_positivos, /*y para el total pues lo haríamos de la sgte manera*/
(( select vg.numero_gestantes from vacas_gestantes vg) - ins.partos - ins.abortos - ins.d_negativos - isnull((select count(*) from rastro),0) - ins.inseminados +ins.d_positivos) as total
from inseminacion_vacas ins where ins.fecha = '20100811'
Eso si quieres un solo reglón pero si quieres que cada fecha aparezca omitís desde de la clausula where..
Ok mira ia le agregue un campo fecha a la tabla rastro i manejo ai todas las salidad de las vacas que se porducen diariamente.
select ins.fecha, 
( select vg.numero_gestantes from gestantes vg) as numero_gestantes,
p.totalpartos,
ins.abortos,
ins.dnegativos,
isnull((select count(*) from rastro),0) as rastro,
ins.inseminados,
ins.dpositivos,
select(( select vg.numero_gestantes from gestantes vg) - p.totalpartos - ins.abortos - ins.dnegativos - isnull((select count(*) from rastro),0) - ins.inseminados +ins.dpositivos) as total
from partos_vacas p, inseminacion_vacas
ya me genera el reporte como kiero pero me sigue mostrando 3 registros ademas quiero que cuando cambie el dia al hacer la nueva consulta trabaje con las nuevas vacas gestantes.
como hago el update para mi tabla.. garciass =)
Es que la tabla partos_vacas no tiene relación con nada, los datos se duplican cuando no existe relación entre tablas y para que no ocurra eso utilizamos sub-selects
debes utilizar (select sum(totalpartos) from partos_vacas) as partos en lugar de p.totalpartos y en el from eliminas la tabla partos_vacas.
si quieres que tu reporte salga asi -->
dia. <span style="white-space: pre;"> </span>gestant <span style="white-space: pre;"> </span>partos<span style="white-space: pre;"> </span>abortos<span style="white-space: pre;"> </span>negat<span style="white-space: pre;"> </span>rastro<span style="white-space: pre;"> </span>ins<span style="white-space: pre;"> </span>posit<span style="white-space: pre;"> </span>total  
------------------------------------------------------ ---------------- ----------- ----------- ----------- ------
2010-08-11         1450       3           <span style="white-space: pre;"> </span>1           <span style="white-space: pre;"> </span>1    <span style="white-space: pre;"> </span>2<span style="white-space: pre;"> </span>2<span style="white-space: pre;"> </span>4<span style="white-space: pre;"> </span><span style="white-space: pre;"> </span>1445 
2010-08-19         1445       6           <span style="white-space: pre;"> </span>1           <span style="white-space: pre;"> </span>2           <span style="white-space: pre;"> </span>2<span style="white-space: pre;"> </span>3<span style="white-space: pre;"> </span>3<span style="white-space: pre;"> </span><span style="white-space: pre;"> </span>1434
2010-08-20<span style="white-space: pre;"> </span>   1434       1<span style="white-space: pre;"> </span>1<span style="white-space: pre;"> </span>1<span style="white-space: pre;"> </span>1<span style="white-space: pre;"> </span>2<span style="white-space: pre;"> </span>4<span style="white-space: pre;"> </span>1432
entonces deberías utilizar cursores y tablas temporales,
si lo que quieres es que cuando calcule el total haga update sobre vacas_gestantes pues también utilizarías un cursor, creo que esta pregunta esta finalizada,  si necesitas saber algo más sobre como crear dicho cursor te pediría que finalices esta pregunta y abras otra.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas