SQL - Suma y y acumular valores

 
Vista:

Suma y y acumular valores

Publicado por Juan Luis (7 intervenciones) el 08/05/2012 18:34:51
Buen dia a todos, Tengo una duda con respecto a acees y sobre todo con SQL,
tengo una tabla como la siguiente:
________________________
I Cliente I adquirido I estado I
-----------------------------------------
a 2 ok
b 3 out
c 1 ok
a 4 ok
a 1 ok
b 2 out
b 3 ok
c 1 ok
a 2 ok

pero pues como soy nuevo en esto he tenido problemas al tratar de hacer lo siguiente. mi profesor me dijo que lo podia hacer con sql pero la verdad no se como pueda hacerlo
lo que necesito es que me aparesca asi:
______________________________
I Cliente I catidad adquirida I OK I out I
-----------------------------------------------------
a 9 4 0
b 8 1 2
c 2 2 0

Espero me puedan ayudar, ya que es para mi proyecto final
Gracias y bendiciones a Todos.
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Suma y y acumular valores

Publicado por leonardo_josue (1173 intervenciones) el 08/05/2012 22:27:38
Hola Juan Luies:

Veo que no tienes nociones de SQL, lo que es un verdadero problema... creo que deberías comenzar por leer algún manual para principiantes, para que te des una idea de lo que puedes y no puedes hacer con SQL.

La consulta que planteas es realmente sencilla... si tuvieras los mínimos conocimientos en SQL... investiga un poco acerca de funciones de agrupación (en particular de la función SUM), investiga acerca de la cláusula GROUP BY, que se utiliza en conjunto de la función SUM. Con esto podrás obtener la columna CANTIDAD ADQUIRIDA de tu consulta.

Para las columnas restantes tendrás que hacer una suma condicionada, investiga la función IIF de access (no recuerdo si soporta un CASE-WHEN). Si tienes problemas con la consulta postea algo de lo que intentaste hacer y con gusto te ayudamos a afinar la consulta

Saludos
Leo.
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

Suma y y acumular valores

Publicado por Juan Luis (7 intervenciones) el 09/05/2012 19:54:49
Hola buen dia, Gracias Leo por tu apotacion, Efectivamente, empezé a investigar sobre SQL y pude desarrollar casi en su totalidad mi consulta, solo que sigo teniendo un pequeño problema, la cantidad ya la pude sumar e incluso los ok y los out ya los cuenta, solo que en una fila me aparecen los out y en otra los ok mas o menos asi:
______________________________
I Cliente I catidad adquirida I OK I out I
-----------------------------------------------------
____a_________ 9________ 4__ -__
____a_________ 9________ -__ 0__
____b_________ 8_________1__ -_
____b_________ 8_________-__ 2_
____c_________ 2_________2__ -_
____c_________ 2_________-__ 0_

no se si se pueda que me los ponga en la misma fila y no me los tenga que dibidir asi como lo habia palanteado antes.
______________________________
I Cliente I catidad adquirida I OK I out I
-----------------------------------------------------
__a___________9________ 4__ 0__
__b___________8________1___2__
__c___________2________2___0__

Gracias y saludos a todos.
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Suma y y acumular valores

Publicado por leonardo_josue (1173 intervenciones) el 09/05/2012 22:56:58
Hola de nuevo Juan Luis:

No nos pones la consulta que estás ejecutando, pero creo supones que tienes algo como esto:

1
2
3
4
Select
...
GROUP BY
cliente, estado



La última agrupación no debes colocarla, porque lo que indicas es que te junte todos aquellos registros que tengan el mismo cliente Y EL MISMO ESTADO. En tu caso, la agrupación la tienes que realizar SÓLO POR CLIENTE...

1
2
GROUP BY
cliente


Si continuas con problemas postea la consulta que estás tratando de ejecutar y con justo te ayudamos a corregirla.

Saludos
Leo.
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

Suma y y acumular valores

Publicado por Juan luis (7 intervenciones) el 10/05/2012 15:27:32
Hola, buen dia, muchas gracias por la ayuda, es cierto, yo tenis el
Group by Cliente, estado; y me aparece cmo lo publique en l parte de arriba, sin embargo cundo lo dejo como Group by cliente; me dice, bueno mejor publico la consulta que trato de ejecutar:

SELECT OTP.Supplier, Sum(OTP.[Quantity Received]) AS [Cantidad Recibida], IIf([OTP].[Alcance]="ok",Count(Alcance),"") AS OKEY, IIf([OTP].[Alcance]="out",Count(Alcance),"") AS OUT
FROM OTP
GROUP BY OTP.Supplier;


El problema es que cuando lo ejecuto me dice que he intentado ejecutar una consulta uqe no incluye la expresión especificada 'IIf([OTP].[Alcance]="out",Count(Alcance),"") ' comparte de una funcion de agregado.
Muchas gracias por la ayuda, saldos y bendiciones.
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Suma y y acumular valores

Publicado por leonardo_josue (1173 intervenciones) el 10/05/2012 16:09:32
Hola de nuevo Juan Luis...

Para el cálculo de la columna CANTIDAD ADQUIRIDA es correcta la forma en que estás realizando la suma, pero las columnas OK y out hay un pequeño problema.

Lo que requieres en realidad es "contar" cuantos registros hay con OK y con OUT para cada categoría... de primera podrías pensar en utilizar COUNT, tal como lo tienes, sin embargo como ya observaste no se obtiene el resultado esperado. En programación un contador lo defines más o menos así:

1
contador = contador + 1


generalmente esto lo colocas dentro de un ciclo y cada vez que se ejecuta el ciclo la variable contador se incrementa en uno. Puedes aplicar este mismo concepto para lo que quieres, es decir, utilizar el if para preguntar si el registro es OK o OUT e incrementar en una unidad cada vez que esto ocurra. La consulta quedaría más o menos así:

1
2
3
4
5
6
7
SELECT
[OTP].[Supplier],
SUM(OTP.[Quantity Received]) AS [Cantidad Recibida],
SUM(IIF([OTP].[Alcance]="ok",1,0)) AS OKEY,
SUM(IIF([OTP].[Alcance]="out",1,0)) AS OUT
FROM OTP
GROUP BY OTP.Supplier;


Tratando de explicar esta consulta, es similar a lo que hacen los presos para determinar cuantos días llevan en prisión, ponen un marca en la pared cada día, y al final suman el número de marcas... en la tabla lo que pasa es lo siguiente, con el if interno se generan dos nuevas columnas así;

1
2
3
4
5
6
7
8
9
10
11
12
13
+----------+-------------------+---------+------+------+
| supplier | Quantity Received | alcance | ok   | out  |
+----------+-------------------+---------+------+------+
| a        |                 2 | ok      |    1 |    0 |
| b        |                 3 | out     |    0 |    1 |
| c        |                 1 | ok      |    1 |    0 |
| a        |                 4 | ok      |    1 |    0 |
| a        |                 1 | ok      |    1 |    0 |
| b        |                 2 | out     |    0 |    1 |
| b        |                 3 | ok      |    1 |    0 |
| c        |                 1 | ok      |    1 |    0 |
| a        |                 2 | ok      |    1 |    0 |
+----------+-------------------+---------+------+------+


al hacer la agrupación se suman estas nuevas columnas, dando la contabilidad que necesitas.

Saludos
Leo.
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

Suma y y acumular valores

Publicado por Juan Luis (7 intervenciones) el 14/05/2012 18:48:45
Hola, Muy buen dia, antes que nada una disculpa leo por no haberte contestado antes, efectivamente, funcionó muy bien lo que me recomendaste, solo fue cosa de adaptrar un poco los datos pero la estructura es la misma, te agradesco infinitamente.
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