SQL - Crear y acumular valores en tablas con SQL

 
Vista:

Crear y acumular valores en tablas con SQL

Publicado por José Roberto (7 intervenciones) el 17/05/2012 16:21:24
Hola, buen dia, he trabajado un poco con SQL y Access, sin embargo, he tenido un problema ya desde hace un rato, el asunto es que tengo que hacer una tabla a partir de SQL en la que extraiga valores de otras tablas, eso haysta ahorita ya me quedo, sin embargo el problema radica aqui:
+----------+-------------------+---------+------+------+
| codigo | cantidad individual | Cantidad usada | sub |a usar |
+----------+-------------------+---------+------+------+
| a | 2_________| 4 | b | 8 |
| b | 3_________| 2 | a | 6 |
| c | 1 _________| 2 | a | 2 |
| a | 4 _________| 2 | c | 8 |
| a | 1_________| 1 | c | 1 |
| b | 2 _________| 2 | c | 2 |
| b | 3 _________| 3 | d | 9 |
| c | 1 _________| 2 | d| 2 |
| a | 2 _________| 1 | d | 2 |
+----------+-------------------+---------+------+------+
lo que necesito es que, cuando mi codigo y mi sub sean iguales que me sume el a usar, por ejemplo, en donde tengo codigo a sub c se repite dos veces, entonces que sumara 8 + 1 y que ya en lugar de aparecerme las dos filas de a,c,8 y a,c,1 me apareciera una sola fila con a,c,9, hasta ahorita tengo este codigo

SELECT BOM.Codigo, BOM.Cantidad ndividual, DayJobs.[Cantidad usada], BOM.Sub, (BOM.Cantidad ndividual)*(DayJobs.[Cantidad usada]) AS [a usar]
INTO Tabla
FROM (DayJobs LEFT JOIN BOM ON DayJobs.item=BOM.Codigo) LEFT JOIN MRPLabels ON BOM.Codigo=MRPLabels.item;

Ojalá me puedan ayudar, de antemano mil gracias.
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

Crear y acumular valores en tablas con SQL

Publicado por José Roberto (1 intervención) el 17/05/2012 16:42:37
tengo esto pero sigue sin funcionar

1
2
SELECT BOM.Codigo, BOM.[Cantidad ndividual], DayJobs.[Cantidad usada] , BOM.Sub, IIf(BOM.Codigo=BOM.Codigo And BOM.Sub=BOM.Sub, Sum((BOM.[Cantidad ndividual])*(DayJobs.[Cantidad usada])),(BOM.[Cantidad ndividual])*(DayJobs.[Cantidad usada])) AS [new Usar], (BOM.[Cantidad ndividual])*(DayJobs.[Cantidad usada]) AS [A usar] INTO Exploción
FROM (DayJobs LEFT JOIN BOM ON DayJobs.item = BOM.Codigo) LEFT JOIN MRPLabels ON BOM.Codigo = MRPLabels.item;



Pero me dice que he intentado ejecutar una consulta que no incluye la expresion especificada 'codigo' como parte de una funcion de agregado.
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

Crear y acumular valores en tablas con SQL

Publicado por leonardo_josue (1173 intervenciones) el 17/05/2012 22:34:56
Hola José Roberto:

Es correcto que utilices la función de agrupación SUM para la consulta, sin embargo estás haciendo un uso incorrecto de la misma. Te recomiendo que leas acerca de la cláusula GROUP BY, la cual se utiliza en conjunto con las funciones de agrupación (SUM, COUNT, MIN, MAX, AVG, VAR) para que observes cómo se utilizas y te pueda servir en tu problema.

Volvamos a tu problema. mencionas que la columna "A USAR" se debe sumar, sin embargo no mencionas qué pasa con las columnas CANTIDAD INDIVIDUAL Y CANTIDAD USADA... Si estoy en lo correcto la columna [A USAR] es en realidad el producto de las dos columnas anteriores, aunque hay un registro que creo que tiene un error de "dedo"

1
| b | 2 _________| 2 | c | 2 |


Según yo, la última columna debería ser 4 y no 2...

Checa este ejemplo... no está en ACCESS, sino en MySQL, pero en realidad es SQL Estándar, por lo que debería funcionar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
mysql> select codigo, sub, cantidad_individual, cantidad_usada from tabla;
+--------+------+---------------------+----------------+
| codigo | sub  | cantidad_individual | cantidad_usada |
+--------+------+---------------------+----------------+
| a      | b    |                   2 |              4 |
| a      | c    |                   4 |              2 |
| a      | c    |                   2 |              1 |
| a      | c    |                   1 |              1 |
| b      | a    |                   3 |              2 |
| b      | c    |                   2 |              2 |
| b      | c    |                   3 |              3 |
| c      | a    |                   1 |              2 |
| c      | a    |                   1 |              2 |
+--------+------+---------------------+----------------+
9 rows in set (0.00 sec)
 
mysql> select codigo, sub, sum(cantidad_individual * cantidad_usada) a_usar
    -> from tabla
    -> group by codigo, sub;
+--------+------+--------+
| codigo | sub  | a_usar |
+--------+------+--------+
| a      | b    |      8 |
| a      | c    |     11 |
| b      | a    |      6 |
| b      | c    |     13 |
| c      | a    |      4 |
+--------+------+--------+
5 rows in set (0.00 sec)


MUCHO OJO... si quieres incluir las columnas CANTIDAD_INDIVIDUAL y CANTIDAD_USAR, debes definir también un criterio de agrupación... en tu ejemplo pones que se tiene que sumar 8 y 1 para dejar un registro como 9... pero ¿qué valor debes dejar en cada columna)? el primer registro tiene (4 y 2)... el segundo registro tiene (1 y 1)... Si sumas individualmente tendrías (5 y 3) pero
5 * 3 = 15... --> por lo tanto hay un error.

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

Crear y acumular valores en tablas con SQL

Publicado por Jose Roberto (7 intervenciones) el 21/05/2012 17:31:26
Hola buen Dia, Muchas gracias leo, de hecho si, solo aplique el Group by en mi consulta y me quedo bien, de hecho quedó resuelto mi problema, bueno parte de, porque despues de esa consulta que hago, que es am, bueno, lo explico, primero debia desarrollar una tabla con lo que es el material, su cantidad a usar, y su subensamble ha y su factor, ya hice esa primera tabla, ahora, la segunda tabla es el problema, cada material tiene un subensamble pero esos subensambles tienen otro subensamble, por ejemplo, una bicicleta su subensamble sería llantas, cuadro manubrio, etc, pero a su vez la lanta tendria subensambles como rayos, camara, rin etc. el punto es que no se como realizar mi segunda consulta, ya intente de multiples maneras pero no me queda, tengo lo siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+--------+------+--------+------+------+
| material | subensamble  | factor | cant_requerida| a_usar |
+--------+------+--------+------+------+
|   021   | 33    |      2 | 3 | 6 |
|   022   | 34    |      2 | 2 | 4 |
|   023   | 33    |      3 | 3 | 9 |
|   024   | 021  |      2 | 8 |16|
|   025   | 022  |      1 | 3 | 3 |
|  026    | 33    |      2 | 3 | 6 |
|  026    | 34    |      1 | 2 | 2 |
|  026    | 023  |     4  | 1 | 4 |
|  026    | 024  |     2  | 2 | 4 |
| 027     | 026 |      2  | 1 | 2 |
+--------+------+--------+------+------+


lo q
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

Crear y acumular valores en tablas con SQL

Publicado por Jose Roberto (7 intervenciones) el 21/05/2012 17:38:17
lo que necesito es que me muestre en la segunda tabla, los subensambles que se encuentran en la columan de materiales de la primera y sus respectivos subensambles, ojalá y me pudiesen ayudar, de antemano mil gracias.
Saludos.
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