Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Subtotalizar registros en consulta

Estas en el tema de Subtotalizar registros en consulta en el foro de SQL Server en Foros del Web. Hola muchachos no se si es el titulo adecuado, pero les comento que tengo y que quiero, tengo la siguiente consulta que me presenta los ...
  #1 (permalink)  
Antiguo 05/05/2011, 08:18
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 12 años, 11 meses
Puntos: 1
Subtotalizar registros en consulta

Hola muchachos no se si es el titulo adecuado, pero les comento que tengo y que quiero, tengo la siguiente consulta que me presenta los abonos que ha realizado un cliente:
Código SQL:
Ver original
  1. SELECT M.NRODCTO PEDIDO,T.NIT
  2.                        ,C.NOMBRE PROVEDOR
  3.                        ,M.TIPODCTO TIPO_PEDIDO
  4.                        ,M.PRODUCTO
  5.                        ,D.DESCRIPCIO DESCRIPCION
  6.                        ,D.CODLINEA
  7.                        ,D.CODSBLIN
  8.                        ,CAST (M.CANTIDAD AS DECIMAL) CANTIDAD
  9.                        ,CAST (M.CANTORIG AS DECIMAL)CANTORIG
  10.                        ,CAST(A.VALOR AS DECIMAL)TOTAL
  11.                                              
  12. FROM MVTRADE M INNER JOIN TRADE T ON M.ORIGEN = T.ORIGEN AND M.TIPODCTO=T.TIPODCTO AND M.NRODCTO=T.NRODCTO
  13.                INNER JOIN MTPROCLI C ON T.NIT=C.NIT
  14.                INNER JOIN MTMERCIA D ON M.PRODUCTO = D.CODIGO
  15.                INNER JOIN ABOCXP A ON T.NIT = A.NIT
  16.         WHERE M.PRODUCTO = '520404'  AND M.TIPODCTO ='FP' -- M.TIPODCTO = 'PC'
  17.        
  18. ORDER BY NIT

El cual me arroja esto:

Código SQL:
Ver original
  1. PEDIDO         NIT                        PROVEDOR                                                                                       TOTAL
  2. 31441       19217265-7     ALVAREZ RODRIGUEZ SANTOS MIGUEL    FP    520404   CUCHARA METALICA           OI04    XX99    1000    1000    1181250
  3. 31442       19217265-7     ALVAREZ RODRIGUEZ SANTOS MIGUEL    FP    520404   CUCHARA METALICA           OI04    XX99    2000    2000    1181250
  4. 31443       19217265-7     ALVAREZ RODRIGUEZ SANTOS MIGUEL    FP    520404   CUCHARA METALICA           OI04    XX99    2000    2000    1181250
  5. 31584       19217265-7     ALVAREZ RODRIGUEZ SANTOS MIGUEL    FP    520404   CUCHARA METALICA           OI04    XX99    2000    2000    1181250
  6. 31656       19217265-7     ALVAREZ RODRIGUEZ SANTOS MIGUEL    FP    520404   CUCHARA METALICA           OI04    XX99    1500    5000    1181250

Si notan se repiten los registros porque son pedidos diferentes, pero lo que se requiere es que en el ultimo campo 'total', solo exista una cantidad, debido a que si notan es el mismo valor, porque es un unico abono pero se repite por cada registro, como hago para que en esta misma consulta me arroje solo una cantidad por cliente (sin sumar), es decir asi:

Código SQL:
Ver original
  1. PEDIDO         NIT                        PROVEDOR                                                                                       TOTAL
  2. 31441       19217265-7     ALVAREZ RODRIGUEZ SANTOS MIGUEL    FP    520404   CUCHARA METALICA           OI04    XX99    1000    1000         0
  3. 31442       19217265-7     ALVAREZ RODRIGUEZ SANTOS MIGUEL    FP    520404   CUCHARA METALICA           OI04    XX99    2000    2000         0
  4. 31443       19217265-7     ALVAREZ RODRIGUEZ SANTOS MIGUEL    FP    520404   CUCHARA METALICA           OI04    XX99    2000    2000         0
  5. 31584       19217265-7     ALVAREZ RODRIGUEZ SANTOS MIGUEL    FP    520404   CUCHARA METALICA           OI04    XX99    2000    2000         0
  6. 31656       19217265-7     ALVAREZ RODRIGUEZ SANTOS MIGUEL    FP    520404   CUCHARA METALICA           OI04    XX99    1500    5000    1181250

Agradezco cualquier ayuda
  #2 (permalink)  
Antiguo 05/05/2011, 10:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Subtotalizar registros en consulta

Pero cual es el problema, estas obteniendo el resultado que deseas eso que necesitas lo podrias hacer en tu herramienta de reporteo no??

Saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 05/05/2011, 10:26
 
Fecha de Ingreso: abril-2011
Ubicación: Iquitos, Peru
Mensajes: 113
Antigüedad: 13 años
Puntos: 31
Respuesta: Subtotalizar registros en consulta

dolo hazle un distinct al proveedor
  #4 (permalink)  
Antiguo 05/05/2011, 10:27
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Subtotalizar registros en consulta

pues en realidad no lo se pues estoy recien contratado en la empresa y mi jefe me pidio esta consulta, pero supongo que se puede hacer por codigo SQL, pues lo necesito por codigo........gracias
  #5 (permalink)  
Antiguo 05/05/2011, 11:03
 
Fecha de Ingreso: abril-2011
Ubicación: Iquitos, Peru
Mensajes: 113
Antigüedad: 13 años
Puntos: 31
Respuesta: Subtotalizar registros en consulta

ya intentaste con distinct???
  #6 (permalink)  
Antiguo 05/05/2011, 11:09
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Subtotalizar registros en consulta

Podrias hacer un union por ejemplo algo asi:


create table #temp(
dato int
)

insert into #temp (dato) values (1181250)

select 0 dato from #temp
union
select dato from #temp


con esto en tu query principal pondrias puros 0's y al hacer el union pondrias el total de la suma :)

Saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 05/05/2011, 15:56
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Subtotalizar registros en consulta

hola muchachos, gracias por responder, estoy crazy con esta consulta y es que la verdad no tengo experiencia pero me gusta full sql, probé con el 'distinct' asi:

Código SQL:
Ver original
  1. SELECT DISTINCT T.NIT
  2.                        ,C.NOMBRE PROVEDOR
  3.                        ,M.TIPODCTO TIPO_PEDIDO
  4.                        ,CAST (A.VALOR AS DECIMAL)TOTAL_ABONO
  5.                      
  6. FROM MVTRADE M INNER JOIN TRADE T ON M.ORIGEN = T.ORIGEN AND M.TIPODCTO=T.TIPODCTO AND M.NRODCTO=T.NRODCTO
  7.                INNER JOIN MTPROCLI C ON T.NIT=C.NIT
  8.                INNER JOIN ABOCXP A ON T.NIT = A.NIT
  9.         WHERE m.TIPODCTO ='FP' OR M.TIPODCTO = 'PC'

y el resulatdo fue este:

Código SQL:
Ver original
  1. NIT                             PROVEDOR                                            TOTAL_ABONO
  2. 19217265-7      ALVAREZ RODRIGUEZ SANTOS MIGUEL                                     1181250
  3. 4422416-6       SERNA LOPEZ RUBEN DARIO                                             132300
  4. 4422416-6       SERNA LOPEZ RUBEN DARIO                                             245700
  5. 79778736-9      TRUJILLO TORRES NATANIEL                                            118125
  6. 79778736-9      TRUJILLO TORRES NATANIEL                                            326250
  7. 79778736-9      TRUJILLO TORRES NATANIEL                                            685125
  8. 800004254-4     INTEGRAL DE DISTRIBUCIONES Y SERVICIOS LTDA                         77486
  9. 800004254-4     INTEGRAL DE DISTRIBUCIONES Y SERVICIOS LTDA                         460863
  10. 800015838-2     COGECAR S.A.                                                        881441
  11. 800015838-2     COGECAR S.A.                                                        1095515

Listo me agrupó por decirlo asi los registros, pero solo cuando no hay diferencias entre ellos, es decir como un group by me agrupa pero cuando son iguales en todos los campos por lo que como se darán cuenta eliminar muchos campos, entonces dos problemas:

1. Como hago para sumar los totales del mismo proveedor por ejemplo 'SERNA LOPEZ RUBEN DARIO' que tiene dos abonos (solo un total por cliente)

2. Como le agrego los otros campos del ejemplo original, sin que afecte el 'DISTINCT', es decir sin que me repita los registros ..........
  #8 (permalink)  
Antiguo 05/05/2011, 16:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Subtotalizar registros en consulta

Para el punto 1

select t1.nit, t1.nombre provedor, t1.tipo_pedido, sum(total_abono)

from
(
SELECT DISTINCT T.NIT
,C.NOMBRE PROVEDOR
,M.TIPODCTO TIPO_PEDIDO
,cast (A.VALOR AS decimal)TOTAL_ABONO

FROM MVTRADE M INNER JOIN TRADE T ON M.ORIGEN = T.ORIGEN AND M.TIPODCTO=T.TIPODCTO AND M.NRODCTO=T.NRODCTO
INNER JOIN MTPROCLI C ON T.NIT=C.NIT
INNER JOIN ABOCXP A ON T.NIT = A.NIT
WHERE m.TIPODCTO ='FP' OR M.TIPODCTO = 'PC'
) as t1 group by t1.nit, t1.nombre provedor, t1.tipo_pedido


Saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 05/05/2011, 16:46
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Subtotalizar registros en consulta

Hola libra y de antemano gracias, intente con tu aporte pero aparece error en la consulta principal en los campos 'C.NOMBRE', 'M.TIPODCTO' y 'A.VALOR' y al final en el group by en los mismos campos, el error dice que no se pueden enlazar estos campos, creo que porque no pueden ver el join, no se que opines, aqui te dejo el codigo que ejecuté:

Código SQL:
Ver original
  1. SELECT DISTINCT T.NIT, C.NOMBRE PROVEDOR, M.TIPODCTO, CAST (A.VALOR AS DECIMAL)TOTAL_ABONO
  2.                      
  3. FROM
  4. (
  5. SELECT DISTINCT T.NIT
  6. ,C.NOMBRE PROVEDOR
  7. ,M.TIPODCTO TIPO_PEDIDO
  8. ,CAST (A.VALOR AS DECIMAL)TOTAL_ABONO
  9.  
  10. FROM MVTRADE M INNER JOIN TRADE T ON M.ORIGEN = T.ORIGEN AND M.TIPODCTO=T.TIPODCTO AND M.NRODCTO=T.NRODCTO
  11. INNER JOIN MTPROCLI C ON T.NIT=C.NIT
  12. INNER JOIN ABOCXP A ON T.NIT = A.NIT
  13. WHERE m.TIPODCTO ='FP' OR M.TIPODCTO = 'PC'
  14. ) AS T GROUP BY T.NIT, C.NOMBRE  , M.TIPODCTO

Etiquetas: registros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:32.