Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Analisis de Query SQL SERVER (https://www.clubdelphi.com/foros/showthread.php?t=67267)

DasGrun 08-04-2010 18:25:07

Analisis de Query SQL SERVER
 
Buenas, Necesito que me ayuden con el siguiente analisis.

Este es un query; cuando el campo DOCTYPE es diferente a 6 y 5 entonces el campo CURTRXAM es positivo de lo contrario es Negativo multiplicandolo por -1, pero quiero agrupar y sumarlos por cada vendedor y presentarlo en general.
Código SQL [-]
SELECT 
           dbo.PM20000.VENDORID,
           dbo.PM00200.VENDNAME,
           dbo.PM20000.DOCTYPE,
           SALDO = CASE WHEN (dbo.PM20000.DOCTYPE <> 6 AND     dbo.PM20000.DOCTYPE <> 5) THEN SUM(dbo.PM20000.CURTRXAM) ELSE SUM(dbo.PM20000.CURTRXAM) * -1  END
FROM
  dbo.PM20000
INNER JOIN dbo.PM00200 ON (dbo.PM20000.VENDORID = dbo.PM00200.VENDORID)
group by
dbo.PM20000.VENDORID,
dbo.PM00200.VENDNAME,
dbo.PM20000.DOCTYPE

el resultado que me presenta es el siguiente:
Código SQL [-]
VENDORID          VENDNAME                                   DOCTYPE      SALDO
05019995129812   A.M. IMPRESORES S. DE R. L.          1              1232
05019995129812   A.M. IMPRESORES S. DE R. L.          6             -1232
521181-6         AEROMOTORES                             5             -2093034
9EP1PU-L         AGENCIA ADUANERA                      5             -668494.4
9EP1PU-L         AGENCIA ADUANERA                      6             -27769.36
MYY6JK-U         ALFREDO RAMOS FUENTES              2              2395.66
MYY6JK-U         ALFREDO RAMOS FUENTES              3              40129.47
650510653        ARMSTRONG EQUIPMENT                3              890470.5
650510653        ARMSTRONG EQUIPMENT                6             -1902740

lo que necesito es que me presente es lo siguiente:
Código SQL [-]
VENDORID          VENDNAME                                       SALDO
05019995129812   A.M. IMPRESORES S. DE R. L.              0
521181-6         AEROMOTORES                                 -2093034
9EP1PU-L         AGENCIA ADUANERA                          -696263.76
MYY6JK-U         ALFREDO RAMOS FUENTES                 42525.13
650510653        ARMSTRONG EQUIPMENT                    -1012269.5
Gracias por Su Ayuda

jcarteagaf 08-04-2010 22:23:14

Para obtener el resultado que esperas debes quitar la columna
dbo.PM20000.DOCTYPE del Select y de la clausula GROUP BY

Saludos

DasGrun 08-04-2010 22:54:31

Gracias por tu ayuda, pero aun quitandolo no me presenta el resultado deseado.

este es un query que se parece al objetivo.

Código SQL [-]
SELECT DISTINCT 
  dbo.PM20000.VENDORID,
  dbo.PM00200.VENDNAME,
  SALDO = (CASE WHEN(dbo.PM20000.DOCTYPE <> 6 AND dbo.PM20000.DOCTYPE <> 5) THEN SUM(dbo.PM20000.CURTRXAM) ELSE '0.00' END) AS FIELD_1,
  SALDO1 = (CASE WHEN(dbo.PM20000.DOCTYPE = 6 AND dbo.PM20000.DOCTYPE = 5) THEN '0.00' ELSE SUM(dbo.PM20000.CURTRXAM) *-1 END) AS FIELD_2
FROM
  dbo.PM20000
  INNER JOIN dbo.PM00200 ON (dbo.PM20000.VENDORID = dbo.PM00200.VENDORID)
GROUP BY
  dbo.PM20000.VENDORID,
  dbo.PM00200.VENDNAME,
  dbo.PM20000.DOCTYPE

Analicenlo y me dice cual es el resultado.

jcarteagaf 09-04-2010 00:43:16

Prueba cambiando tu query de esta forma

Código SQL [-]
SELECT DISTINCT 
  dbo.PM20000.VENDORID,
  dbo.PM00200.VENDNAME,
  SALDO = SUM( CASE WHEN(dbo.PM20000.DOCTYPE <> 6 AND dbo.PM20000.DOCTYPE <> 5) THEN dbo.PM20000.CURTRXAM ELSE 0 END) AS FIELD_1,
  SALDO1 = SUM(CASE WHEN(dbo.PM20000.DOCTYPE = 6 AND dbo.PM20000.DOCTYPE = 5) THEN 0 ELSE SUM(dbo.PM20000.CURTRXAM) *-1 END) AS FIELD_2
FROM
  dbo.PM20000
  INNER JOIN dbo.PM00200 ON (dbo.PM20000.VENDORID = dbo.PM00200.VENDORID)
GROUP BY
  dbo.PM20000.VENDORID,
  dbo.PM00200.VENDNAME,
  dbo.PM20000.DOCTYPE

DasGrun 09-04-2010 02:01:15

El Resultado es lo mismo agregandole el SUM, A continuacion te Presento un Query y el resultado para que lo mires mas detalladamente.

Código SQL [-]
SELECT DISTINCT
dbo.PM20000.VENDORID,
CUENTAS_PAGAR = CASE WHEN (dbo.PM20000.DOCTYPE <> 6 AND  dbo.PM20000.DOCTYPE <> 5) THEN SUM(dbo.PM20000.DOCAMNT) ELSE '0.00' END,
PAGOS = CASE WHEN (dbo.PM20000.DOCTYPE = 6 OR dbo.PM20000.DOCTYPE = 5) THEN SUM(dbo.PM20000.DOCAMNT) * -1 ELSE '0.00' END
FROM
  dbo.PM20000
GROUP BY 
  dbo.PM20000.VENDORID,
  dbo.PM20000.DOCTYPE

El resultado es el Siguiente.

Código:

VENDORID        CUENTAS_PAGAR          PAGOS
00001                        1000                        0
00001                        0                              -1000
00002                        2000                        0 
00002                        0                              -1000 
00003                        500                          0 
00003                        0                              -4000

Para el VENDORID 00001 su saldo es 0 porque el total de la suma de CUENTAS_PAGAR es igual a total de suma de PAGOS, el VENDORID 00002 Su saldo es 1000 porque 2000 +(-1000) = 1000; el saldo del VENDORID 00003 es -3500 porque 500 + (-4000) = -3500

Lo que necesito es crear un campo que me sume estas columna siempre y cuando es el Mismo VENDORID.

Gracias Nuevamente.


La franja horaria es GMT +2. Ahora son las 09:08:10.

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