Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Restar Campo Generados de SQL (https://www.clubdelphi.com/foros/showthread.php?t=83444)

kurono 19-06-2013 05:24:21

Restar Campo Generados de SQL
 
hola amigos como estan necesito restar el resultado de varias sentencia de sql pero no encuento la forma de hacerlo
Código SQL [-]
 SELECT  COUNT(TIPOTRANSACION)AS P FROM TRANSACIONES WHERE TIPOTRANSACION ='P' 
 SELECT  COUNT(TIPOTRANSACION)AS D FROM TRANSACIONES WHERE TIPOTRANSACION ='D' 
 SELECT  COUNT(TIPOTRANSACION)AS R FROM TRANSACIONES WHERE TIPOTRANSACION ='R'

lo que necesito es restar los campos P, D ,R

systemix 19-06-2013 06:49:33

Hola Korono, que tal!

Bueno a la verdad no entiendo bien tu requerimiento :confused:. Puedo comprender sí, que tu tienes en tu tabla transacciones, en el campo TIPOTRANSACION varios valores. Ya nos expusiste algunos: P, D, R. ¿Tu tabla tiene más tipos de transacción?

Supongamos que sí, y tengas en tu tabla transacciones los tipos de transaccion restantes x, y, z. Podrías hacer la siguiente consulta y te daría un resultado similar. Y hasta lo veo mas sencillo:

Código SQL [-]
Select Count(TIPOTRANSACCION) from TRANSACCIONES
where 
TIPOTRANSACCION='x' and
TIPOTRANSACCION='y' and
TIPOTRANSACCION='z'

con una consulta así, puedes obtener lo que querías anteriormente. Ya que estás obviando a contar los tipos P, D y R.

Si no es de esta forma, no veo lo factible de tu consulta, ya que si todos los registros tienen al menos 1 de los tipos de transacción que me dijiste, el resultado te va a dar cero.

Por ejemplo, supongamos que lograste contar todos los registros de tu tabla que necesariamente tienen alguno de los 3 tipos de transaccion:

Nro de Registros: 30.
Nro por TipoTransaccion = P : 15
Nro por TipoTransaccion = D : 10
Nro por TipoTransaccion = R : 5

Restamos P-D-R = 15-10-5 = 0.

Espero haberte ayudado y entendido :D

kurono 19-06-2013 08:19:32

probare el codigo luego te cuento

oscarac 19-06-2013 08:54:24

Cita:

Empezado por systemix (Mensaje 462422)
Hola Korono, que tal!

Bueno a la verdad no entiendo bien tu requerimiento :confused:. Puedo comprender sí, que tu tienes en tu tabla transacciones, en el campo TIPOTRANSACION varios valores. Ya nos expusiste algunos: P, D, R. ¿Tu tabla tiene más tipos de transacción?

Supongamos que sí, y tengas en tu tabla transacciones los tipos de transaccion restantes x, y, z. Podrías hacer la siguiente consulta y te daría un resultado similar. Y hasta lo veo mas sencillo:

Código SQL [-]
Select Count(TIPOTRANSACCION) from TRANSACCIONES
where 
TIPOTRANSACCION='x' and
TIPOTRANSACCION='y' and
TIPOTRANSACCION='z'

con una consulta así, puedes obtener lo que querías anteriormente. Ya que estás obviando a contar los tipos P, D y R.

Si no es de esta forma, no veo lo factible de tu consulta, ya que si todos los registros tienen al menos 1 de los tipos de transacción que me dijiste, el resultado te va a dar cero.

Por ejemplo, supongamos que lograste contar todos los registros de tu tabla que necesariamente tienen alguno de los 3 tipos de transaccion:

Nro de Registros: 30.
Nro por TipoTransaccion = P : 15
Nro por TipoTransaccion = D : 10
Nro por TipoTransaccion = R : 5

Restamos P-D-R = 15-10-5 = 0.

Espero haberte ayudado y entendido :D


pero esto solo sirve si conoces de antemano los tipos de transacciones y si fueran variables?
estoy revisando una forma, apenas la prueba te aviso

kurono 19-06-2013 15:56:59

amigo systemix la sentencia me devuelve 0 en todo caso supongamos que tengo 5 registro y le resto 2 deberia quedar 3 pero en cambio me regresa 0

kurono 19-06-2013 16:26:20

se me olvido decir que los campos son de tipo texto no numerico

oscarac 19-06-2013 17:29:28

Cita:

Empezado por kurono (Mensaje 462442)
amigo systemix la sentencia me devuelve 0 en todo caso supongamos que tengo 5 registro y le resto 2 deberia quedar 3 pero en cambio me regresa 0


Coloca la estructura de ese archivo y que datos contiene ese campo TipoTransaccion

systemix 19-06-2013 21:12:13

Cita:

Empezado por kurono (Mensaje 462444)
se me olvido decir que los campos son de tipo texto no numerico

Disculpa que no me haya explicado bien. Cuando hablo de "Nro por TipoTransaccion" me refiero al resultado que te da el count. Yo sé que son de tipo String porque lo estás declarando así en la condición WHERE.

systemix 19-06-2013 21:15:23

Cita:

Empezado por oscarac (Mensaje 462449)
Coloca la estructura de ese archivo y que datos contiene ese campo TipoTransaccion

Por eso digo amigo oscarac. Kurono debes explicarnos mejor qué consulta necesitas hacer. Quizás se haga de otra forma :D

kurono 20-06-2013 06:09:05

el campo TipoTransacion es de tipo nvarchar y como dije antes solo quiero restar los resultado de los count o por lo menos saber restar los campo generado por los count

oscarac 20-06-2013 06:28:07

Cita:

Empezado por kurono (Mensaje 462498)
el campo TipoTransacion es de tipo nvarchar y como dije antes solo quiero restar los resultado de los count o por lo menos saber restar los campo generado por los count

creo q no nos has entendido
queremos saber q tipos de Transaccion se graban en ese campo
pq si solo se graban los 3 q tienes, entonces el resultado siempre sera cero

kurono 20-06-2013 06:42:00

si exacto siempres son los tres

oscarac 20-06-2013 06:43:30

Cita:

Empezado por kurono (Mensaje 462442)
amigo systemix la sentencia me devuelve 0 en todo caso supongamos que tengo 5 registro y le resto 2 deberia quedar 3 pero en cambio me regresa 0

entonces no coincide con lo q dices aqui

pon un ejemplo

Cita:

TipoTransaccion
P
P
P
D
D
R
R

q quieres restar?

kurono 20-06-2013 21:46:11

lo que quiero restar es la cantidad de registro existente en una tabla no el valor de un campo no se si me explico ahora

fjcg02 21-06-2013 09:11:56

Prueba esto a ver qué te parece.

Imagino que no te costará entenderlo.
si el campo TipoTransaccion es = A sumas 1, si no , sumas -1

Código SQL [-]
select sum( case when TipoTransaccion ='A' then 1 else when TipoTransaccion ='B' OR TipoTransaccion ='C' then -1 else 0 end ) as TOTAL 
form TRANSACIONES 
where TipoTransaccion IN ('A','B','C')

Nos comentas el resultado, por favor.

Un saludo

kurono 23-06-2013 09:35:10

probare el codigo luego te cuento


La franja horaria es GMT +2. Ahora son las 01:41:30.

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