Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-04-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Query no viene nada

Señores, tengo la query abajo. Se em mi tabla, NF_CAPEADOR, no hay ningún registro, entonces mi query no retorna nada, mismo que haga registro en la tabla NF_FUNC_VEN. Esta query debe traer los registros de la NF_CAPEADOR(venta del dia) e tambien toda la venta acumulada en el periodo(NF_FUNC_VEN), obedeciendo la regla en las clausulas WHERE. El problema esta en el GROUP BY, pero no se como resolver. Pero si la NF_CAPEADOR, tiene registro, entonces la query funciona. Abajo, la query:

Cita:
SELECT
CAP.CD_FUNC "FUNCIONARIO",
FUNC.NOME "NOME",
ACUMULADO.DT_FUNC,
SUM(CAP.VL_BRUTO + CAP.VL_DESC_ACR) -
COALESCE(DEVOLUCAO.DEV,0) "VENDA DIA",
SUM(CAP.VL_BRUTO + CAP.VL_DESC_ACR) -
COALESCE(DEVOLUCAO.DEV,0) +
COALESCE(ACUMULADO.ACUM,0) "VENDA ACUMULADA"
FROM TB_SAC_NF_CAPEADOR CAP
INNER JOIN TB_SAC_FUNC FUNC
ON(FUNC.CD_FUNC = CAP.CD_FUNC)
LEFT JOIN
(SELECT
CP.CD_FUNC,
SUM(CP.VL_BRUTO + CP.VL_DESC_ACR)"DEV"
FROM TB_SAC_NF_CAPEADOR CP
WHERE
CP.SR_NF = 'E2' AND
CP.ST_CANC = 0 AND
CP.DT_ENT
BETWEEN
'2008-Mar-29' AND
'2008-Mar-31'
GROUP BY
CP.CD_FUNC) "DEVOLUCAO"
ON(DEVOLUCAO.CD_FUNC = FUNC.CD_FUNC)
LEFT JOIN
(SELECT
VEN.CD_FUNC,
VEN.DT_FUNC,
SUM(VEN.VL_FUNC)"ACUM"
FROM TB_SAC_FUNC_VEN VEN
WHERE
VEN.DT_FUNC
BETWEEN
'2008-Mar-29' AND
'2008-Mar-31'
GROUP BY
VEN.CD_FUNC,
VEN.DT_FUNC)"ACUMULADO"
ON(ACUMULADO.CD_FUNC = CAP.CD_FUNC)
WHERE
ST_CANC = 0 AND
((SR_NF = 'D2') OR ((SR_NF = 'B2') AND
(CD_CFOP = 6102))) AND DT_ENT
BETWEEN
'2008-Mar-29' AND
'2008-Mar-31'
GROUP BY
CAP.CD_FUNC,
FUNC.NOME,
DEVOLUCAO.DEV,
ACUMULADO.ACUM,
ACUMULADO.DT_FUNC
Responder Con Cita
  #2  
Antiguo 08-04-2008
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Por favor: utiliza las etiquetas [sql] que no hay quién se entere. Por ejemplo:

Código SQL [-]
SELECT nombre, SUM (cantidad), y_tal
  FROM tabla, otra_tabla
 WHERE tabla.id = otra_tabla.clave_tabla
       AND tabla.nombre <> ''
 GROUP BY tabla.id

Gracias.

(Si no sabes usarlas, cita este mensaje y lo verás)
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 08-04-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Amigo, yo hizo exatamente esto que ud. estas me diciendo y no funciona. Vea mi query.
Responder Con Cita
  #4  
Antiguo 08-04-2008
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Código SQL [-]
Select CAP.CD_FUNC "FUNCIONARIO",
FUNC.NOME "NOME",
ACUMULADO.DT_FUNC,
SUM(CAP.VL_BRUTO + CAP.VL_DESC_ACR) - COALESCE(DEVOLUCAO.DEV,0) "VENDA DIA",
SUM(CAP.VL_BRUTO + CAP.VL_DESC_ACR) - COALESCE(DEVOLUCAO.DEV,0) + COALESCE(ACUMULADO.ACUM,0) "VENDA ACUMULADA"
from TB_SAC_NF_CAPEADOR CAP
Inner Join TB_SAC_FUNC FUNC
  on(FUNC.CD_FUNC = CAP.CD_FUNC)
Left Join (Select CP.CD_FUNC,
    Sum(CP.VL_BRUTO + CP.VL_DESC_ACR)"DEV"
    From TB_SAC_NF_CAPEADOR CP
    Where CP.SR_NF = 'E2' and
      CP.ST_CANC = 0 and
      CP.DT_ENT between '2008-Mar-29' And '2008-Mar-31'
    Group By CP.CD_FUNC) "DEVOLUCAO"
  on(DEVOLUCAO.CD_FUNC = FUNC.CD_FUNC)
Left Join (Select VEN.CD_FUNC,
    VEN.DT_FUNC,
    Sum(VEN.VL_FUNC)"ACUM"
    Ffrom TB_SAC_FUNC_VEN VEN
    Where VEN.DT_FUNC Between '2008-Mar-29' And '2008-Mar-31'
    Group By VEN.CD_FUNC, VEN.DT_FUNC)"ACUMULADO"
  on(ACUMULADO.CD_FUNC = CAP.CD_FUNC)
Where ST_CANC = 0 and ((SR_NF = 'D2') or ((SR_NF = 'B2') And
  (CD_CFOP = 6102))) and DT_ENT between '2008-Mar-29' And '2008-Mar-31'
Group By CAP.CD_FUNC, FUNC.NOME, DEVOLUCAO.DEV, ACUMULADO.ACUM, ACUMULADO.DT_FUNC
__________________
Piensa siempre en positivo !
Responder Con Cita
  #5  
Antiguo 08-04-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Lo que suelo hacer en estos casos es:
(1) Revisar lo INNER JOIN. Tal vez en alguno de ellos estés "cortando" demasiados Datos.
(2) Eliminar JOINS de la consulta y lanzar inicialmente la consulta con 1 o 2 tablas, e ir ejecutándola poco a poco; Ves revisando resultados y ves añadiendo JOINs a ver en qué punto "deja" de funcionar como esperas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 08-04-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Señores, hizo de otra forma consegui algo, pero no lo todo cierto, o sea, si la tabla CAPEADOR estás sin registro, entonces el resultdo es corecto, pero no estas vacia, entonces alguns registros aparecem en la venta diaria, pero no todos los vendedores, y todos tiene ventas. Mira la query abajo:

Cita:
SELECT
F.CD_FUNC,
F.NOME,
COALESCE((DIARIA.DIA - DEVOLUCAO.DEV),0) "VENDA DIA",
COALESCE((DIARIA.DIA - DEVOLUCAO.DEV),0) +
COALESCE(ACUMULADA.ACUM,0) "VENDA ACUMULADA"
FROM
TB_SAC_FUNC F
LEFT JOIN
(SELECT
FUNC.CD_FUNC,
SUM(COALESCE(CP.VL_BRUTO,0) + COALESCE(CP.VL_DESC_ACR,0)) "DEV"
FROM
TB_SAC_FUNC FUNC
LEFT JOIN
TB_SAC_NF_CAPEADOR CP
ON(FUNC.CD_FUNC = CP.CD_FUNC)
WHERE
ST_CANC = 0 AND
SR_NF = 'E2' AND
DT_ENT
BETWEEN
'2008-Mar-01' AND
'2008-Mar-31'
GROUP BY
FUNC.CD_FUNC)"DEVOLUCAO"
ON(DEVOLUCAO.CD_FUNC = F.CD_FUNC)
LEFT JOIN
(SELECT
FUNC.CD_FUNC,
SUM(COALESCE(CP.VL_BRUTO,0) + COALESCE(CP.VL_DESC_ACR,0)) "DIA"
FROM
TB_SAC_FUNC FUNC
LEFT JOIN
TB_SAC_NF_CAPEADOR CP
ON(FUNC.CD_FUNC = CP.CD_FUNC)
WHERE
ST_CANC = 0 AND
((SR_NF = 'D2') OR ((SR_NF = 'B2') AND
(CD_CFOP = 6102))) AND DT_ENT
BETWEEN
'2008-Mar-01' AND
'2008-Mar-31'
GROUP BY
FUNC.CD_FUNC)"DIARIA"
ON(DIARIA.CD_FUNC = F.CD_FUNC)
LEFT JOIN
(SELECT
F_VEN.CD_FUNC,
SUM(COALESCE(VL_FUNC,0)) "ACUM"
FROM
TB_SAC_FUNC_VEN F_VEN
WHERE
F_VEN.DT_FUNC
BETWEEN
'2008-Mar-01' AND
'2008-Mar-31'
GROUP BY
F_VEN.CD_FUNC)"ACUMULADA"
ON(ACUMULADA.CD_FUNC = F.CD_FUNC)
WHERE
F.CD_CARGO < 4
ORDER BY
F.CD_FUNC
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Query no viene correcto Paulao Conexión con bases de datos 0 17-03-2008 16:22:03
Lo que viene a la Vista... Epachsoft Noticias 0 11-04-2007 00:59:55
Viene el Explorer 7 seoane Noticias 6 10-10-2006 17:55:25
Consulta en Query que no devulve nada jdangosto SQL 3 01-10-2004 08:59:50
No se nada de nada... Me ayudan???? Vampire Conexión con bases de datos 12 02-06-2004 18:14:30


La franja horaria es GMT +2. Ahora son las 03:08:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi