Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Query no viene nada (https://www.clubdelphi.com/foros/showthread.php?t=55104)

Paulao 08-04-2008 13:14:03

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

Ñuño Martínez 08-04-2008 13:27:01

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)

Paulao 08-04-2008 13:56:41

Amigo, yo hizo exatamente esto que ud. estas me diciendo y no funciona. Vea mi query.

gluglu 08-04-2008 14:10:35

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

Neftali [Germán.Estévez] 08-04-2008 15:54:27

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.

Paulao 08-04-2008 16:52:14

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


La franja horaria es GMT +2. Ahora son las 01:42:55.

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