SQL - Ayuda con Select

 
Vista:

Ayuda con Select

Publicado por lissi (14 intervenciones) el 09/06/2006 01:21:22
HOLA PROGRAMADORES NECESITO AYUDA CON ESTE SELECT TENGO ESTA CONSULTA

SELECT F.CODIGOVENDEDOR,SUM(D.TOTALITEM) TFACTURA , SUM(ND.TOTALITEM) TNOTA
FROM FACTURA F , FACTURADETALLE D, CLIENTE C ,CXPNOTACREDITO N, CXPNOTACREDITODETALLE ND
WHERE F.CODIGOEMP=D.CODIGOEMP AND
F.TIPODOCUMENTO =D.TIPODOCUMENTO AND
F.NUMEROSERIE = D.NUMEROSERIE AND
F.NUMEROFACTURA= D.NUMEROFACTURA AND
F.CODIGOCLIENTE= C.CODIGOCLIENTE AND
N.NUMEROSERIE = ND.NUMEROSERIE AND
N.NUMERONOTACREDITO = ND.NUMERONOTACREDITO AND
F.CODIGOEMP =001 AND
F.TIPODOCUMENTO IN(01,02)AND
F.CODIGOVENDEDOR <> 000001 AND
F.SITUACIONFACTURA <> 90 AND
F.TIPOFACTURA= 'F' AND
C.CODIGOTIPONEGOCIO IN('01','02','03','04','05','06','07') AND
F.FECHAFACTURA BETWEEN '01/01/2005' AND '12/12/2006' AND
C.ESTADOCLIENTE=01
GROUP BY F.CODIGOVENDEDOR

Y ME DEVUELVE ESTO:

CODIGOVENDEDOR TFACTURA TNOTA DEVERIA SER TNOTA
000002 3091 861 123
000004 3246 615 0
000005 1319 492 0

PERO LA TABLA, CXPNOTACREDITO TIENE SOLO UN REGISTRO ES DECIR NO COINCIDE CON LA COLUMNA CALCULADA TNOTA DE LA CONSULTA DE ARRIBA..... PORQUE SUCEDE ESTO???????? MIREN AQUI ESTA LA DATA DE ESTAS TABLAS

CXPNOTACREDITO
CODEMP NUMSE NUMNOTA FECHANOTA SITUACION CODVEND CODCLI
001 001 000001 2006-05-02 01 000002 000004

CXPNOTACREDITODETALLE
CODEMP NUMSERIE NUMNOTA NUMLINEA CODPROD CANTDEV TOTALITEM
001 001 000001 35 3500000001 10 123

Graxias ojala me puedan ayudar
Lissette
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con Select

Publicado por Isaías (5072 intervenciones) el 09/06/2006 02:15:51
Lo que alcanzo a ver:

F.FECHAFACTURA BETWEEN '01/01/2005' AND '12/12/2006'

Es una forma INCORRECTA del manejo de fechas, recuerda que traes HORAS, MINUTOS y SEGUNDOS, por tanto debes utilizar MAYOR(IGUAL), MENOR(IGUAL)

F.FECHAFACTURA >= '20050101' AND F.FECHAFACTURA <= '20061212'

Ademas, ve que utilizo formato ANSI: yyyymmdd

C.CODIGOTIPONEGOCIO IN('01','02','03','04','05','06','07')

Aqui si, debes utilizar BETWEEN

C.CODIGOTIPONEGOCIO BETWEEN '01' AND '07'

Cambia tu forma de LIGAR las tablas, utiliza JOIN, en lugar de =

-- Forma incorrecta
FROM TABLA1 t1, TABLA2 t2, TABLA3 t3
WHERE t1.col1 = t2.col2 AND t1.col1 = t3.col1

-- Forma correcta

FROM TABLA1 t1 JOIN TABLA2 t2 ON t1.COL1 = T2.COL1
JOIN TABLA3 t3 ON t1.COL1 = t3.COL1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con Select

Publicado por lissi (14 intervenciones) el 09/06/2006 19:56:49
HOLA

El caso es el siguiente tengo que mostrar a TODOS los vendedores que esten en la tabla factura, el Total Dolares de la tabla facturadetalle y el TotalDolares de la tabla CXPNOTACREDITODETALLE para cada vendedor.
Es decir algo asi : Vendedor Total Factura TotalNota

El problema surge cuando en el where le paso alguna restriccion a la tabla CXPNOTACREDITO (esta comentado en el select de abajo) porque pierdo a todos los vendedores de la tabla factura y muestra solo los comunes entre ambas tablas. Pero es importante que le pase esas restriccion a la tabla CXPNOTACREDITO xq si no el calculo no estaria bien echo. Que puedo hacer?????

SELECT F.CODIGOVENDEDOR , SUM(FD.TOTALITEM)AS TFAC,
ISNULL(ROUND(SUM(ND.TOTALITEM)/(SELECT COUNT(DISTINCT(CODIGOVENDEDOR))FROM FACTURA),0,1),0)AS TNOTA
FROM FACTURADETALLE FD JOIN FACTURA F ON
FD.CODIGOEMP =F.CODIGOEMP AND
FD.TIPODOCUMENTO =F.TIPODOCUMENTO AND
FD.NUMEROSERIE = F.NUMEROSERIE AND
FD.NUMEROFACTURA= F.NUMEROFACTURA
LEFT JOIN CXPNOTACREDITO N ON
F.CODIGOVENDEDOR = N.CODIGOVENDEDOR
LEFT JOIN CXPNOTACREDITODETALLE ND ON
N.CODIGOEMP=ND.CODIGOEMP AND
N.NUMEROSERIE = ND.NUMEROSERIE AND
N.NUMERONOTACREDITO = ND.NUMERONOTACREDITO
JOIN CLIENTE C ON
F.CODIGOCLIENTE = C.CODIGOCLIENTE
LEFT JOIN CLIENTE CL ON
N.CODIGOCLIENTE = CL.CODIGOCLIENTE
WHERE
F.CODIGOEMP =001 AND
F.TIPODOCUMENTO IN(01,02)AND
F.CODIGOVENDEDOR <> 000001 AND
F.SITUACIONFACTURA <> 90 AND
F.TIPOFACTURA= 'F' AND
F.FECHAFACTURA BETWEEN '01/01/2005 00:00:00' AND '01/06/2006 23:00:00' AND
C.CODIGOTIPONEGOCIO IN('01','02','03','04','05','06','07') AND
C.ESTADOCLIENTE=01 --AND
-- N.CODIGOEMP =001 AND
-- N.SITUACIONNOTACREDITO <> 90 AND
-- N.FECHANOTACREDITO BETWEEN '01/01/2005 00:00:00' AND '01/06/2006 00:00:00'
GROUP BY F.CODIGOVENDEDOR

Si ejecuto la consulta de abajo como esta sale esto
VENDEDOR TFAC TNOTA
000002 6182 8.000000
000004 3246 1.000000
000005 1319 .000000

Pero si descomento cualquiera de las 3 ultimas linea de la consulta de abajo me aparece esto pierdo a los otros 2 vendedores. Lo que necesito es que se muestren todos los vendedores aunque en TNOTA tengan 0

VENDEDOR TFAC TNOTA
000002 6182 6.000000


Graxias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar