Sum sql

Umm creo que es muy básica mi cuestión pero tiene rato que no programo =(.
Estoy tratando de hacer un sum del mismo campo es decir tengo la tabla transacciones y quiero sumar la columna de cantidad disponible, en otros lenguajes lo que debería hacer es tener una variable donde se vaya sumando este resultado pero en pl-sql no se si deba ser así o ya con la siguiente instrucción basta.

1 respuesta

Respuesta
1
El Lpad deberías de quitarlo, bajo mi punto de vista, por que el Lpad, te inserte la cadena hasta el numero de tamaño que tenga.
La funcion lpad
Lpad('PEPE', 5,'a') seria igual 'aPEPE'
---------------------------------------------------------------------------
La suma quedaria como sigue, como no se si es
select sum(nvl(campo,0))
  into wvariable
from Ttabla
where condiciones;
El lpad lo requiero para justificar la posición de salida en el archivo, ¿umm oye que significa nvl y el into variables es la variable donde se guarda la suma?
Nvl, lo que hace es que cuando un valor es nulo, le asigna el de detrás de la coma, ejemplo.
Nvl(variable,'Hola') - Si "variable" fuese nula, pondría Hola
Mira, si quieres hacer un lpad, para justificarlo lo mejor es crearle formato. De todas formas para justificar y borar lo que sobra por los lados son ltrim para la izquierda y rtrim para la derecha, pero estas 2 funciones son de caracteres, un number no hace falta justificarlo, ya te digo dale formato y punto, algo como:
To_char(sum(nvl(campo, 0)),'9D00')
Ahora te explico.
Cuando a un to_char le pasas una variable number y después de la coma pones una secuencia con 9,0, G y DE, crea un formato con puntos y comas. Ejemplo:
To_char(8756.98,'99G999D99') - devolveria - 8.756,98
To_char(0.2,'0D00') - devolveria - 0,20
To_char(0.2,'0D09') - devolveria - 0,2
Es decir:
Los 9, son espacios que si tienen numero se rellenan pero que sin o tienen numero ni nada a su izquierda no muestra nada.
Los 0, son espacios que se rellenan y si no tienen nada a su izquierda tampoco se rellenan, pero con la diferencia del nueve que detrás de la coma si que se muestran obligado, los 9 no se muestran.
Las G son los . de mil, millón, etc, entre las G tiene que haber tres 9 o 0.
Y la D es de Decimales.
Si no pones nada por la izquierda muestra lo que encuentres y formatea hasta donde tengas, es decir:
To_char(123456789,'9G999') - devolveria - 123456.789 - pero el punto seria de miles, no de decimales
El into intriduce en la variable que lo vallas a guardar.
Mil gracias, oye ultimo favor podrías ayudarme con la sintaxis de mi código no más no doy una =(.
¿Duda es necesario enlistar los campos que se vana usar en el decode? Y como va el cierre de paréntesis, es que he buscado en internet y no veo ejemplos con decode anidados o concatenados.
select clave_operacion,
codigo_mensaje,
cantidad_balance
from transacciones
decode(clave_operacion||codigo_mensaje,'100210',sum(cantidad_balance,0))
select clave_operacion, codigo_tipo_mensaje, cantidad_balance from transacciones
decode(clave_operacion,'10',decode(codigo_tipo_mensaje,'0210'),sum(cantidad_balance,0));
Mejor te explilco como va el decode y tu sacas tus conclusiones, ¿ok?
El decode es una forma de if, cuando haces un decode en realidad estas preguntando.
Decode('hola', valor 1, respuesta 1, valor 2, respuesta 2, respuesta si no es nada)
Creo que tiene un limite, pero no sabría decirte cual es,
básicamente compara lo que le pasa al principio, con los valores, y devuelve las respuestas, al final siempre hay que indicarle en el caso de que no sea igual a ningún valor.
Ejemplos:
Decode ('hola', 'hola', '1', 'adios', '2', '3') - devuelve - '1'
Decode ('adios', 'hola', '1', 'adios', '2', '3') - devuelve - '2'
Decode('pepe', 'hola', '1', 'adios', '2', '3') - devuelve - '3'
Se pueden poner más valores y respuestas, pero creo que hay un limite, pero siempre puedes anidar decodes dentro de decodes, es decir
Decode(decode(variable, 'hola', '1', variable), 'adios', '2', decode(variable, 'hola', '1', variable))
Es decir si variable igual a 'hola', devuelve '1', sino devuelve variable, y si lo que devuelve el decode es igual a 'adios' devuelve '2', y si no es igual, vuelve ha hacer el primer decode y devuelve el resultado.
¿No se si te he aclarado tus dudas?
Si tiene más no dudes en decírmelo.
Oye muchas gracias por tu tiempo, si lo que más confusión me dio es el decode anidado, y que bueno yo solo había programado en estructurado, el sum también me pareció una herramienta diferente a como yo lo manejado.
Por si te sirve alguna vez yo lo use de la siguiente manera:
to_char(decode(campo1!campo2,'valores de ambos campos', sum(campo3), 0), 99999.99)
! Son caracteres de concatenación.
Que tengas un excelente fin de semana, y gracias nuevamente. A ver que nuevas dudas me aquejan, upsss.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas