SQL - codigo para encontrar saldos

 
Vista:
sin imagen de perfil
Val: 18
Ha disminuido su posición en 2 puestos en SQL (en relación al último mes)
Gráfica de SQL

codigo para encontrar saldos

Publicado por nick (8 intervenciones) el 08/01/2019 15:06:28
Hola a todos un compañero me ayudo con este codigo para encontrar los saldos de productos,al parecer habian problemas con campos nulos o algo asi y se repetian las cantidades y daba un saldo errado,este es el codigo:

Sql = " select ensa.prod_id, prod.articulo, sum(ensa.entradas) AS entradas, sum(ensa.salidas) AS salidas" & _
" FROM (SELECT id_p AS prod_id,cantidad AS entradas,0 AS salidas FROM [mov_Entradas$] " & _
" Union ALL SELECT id_p, 0, cant FROM [Mov_Salidas$]) AS ensa, [Productos$] AS prod" & _
" WHERE ensa.prod_id = prod.ID GROUP BY ensa.prod_id, prod.articulo;"

Rs.Open Sql, Cnn, 1, 1

no lo entiendo soy principiante,alguien me puede explicar este codigo,por que hay un select despues de from cuando tiene que hacer referencia a la tabla donde se toman los campos a consultar,por que hay ceros(0) y con alias (0 AS salidas) y como determinar el saldo final,intente restando entradas- salidas pero nome funciono,agradezco profundamente su generosa ayuda un saludo cordial
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
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

codigo para encontrar saldos

Publicado por Isaias (1921 intervenciones) el 08/01/2019 16:20:03
Intentare hacerlo de la mejor forma

por que hay un select despues de from cuando tiene que hacer referencia a la tabla donde se toman los campos a consultar,

R=Conjuntos de datos, lo que esta dentro del paréntesis es un CONJUNTO DE DATOS al que hace referencia el SELECT

por que hay ceros(0) y con alias (0 AS salidas)

R=Si en esa parte del select esta tomando solo las ENTRADAS, entonces quien te ayudo a poner el codigo, puso 0 as SALIDAS, entonces, si tengo solo ENTRADAS en ese conjunto, por ende las salidas las pone fijas en CERO.

y como determinar el saldo final,intente restando entradas- salidas pero nome funciono,

R= En la parte del SELECT (superior o externo al parentesis), debe hacer

(sum(ensa.entradas) - sum(ensa.salidas) ) as Saldo

Espero que esto quede aclarado, Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 18
Ha disminuido su posición en 2 puestos en SQL (en relación al último mes)
Gráfica de SQL

codigo para encontrar saldos

Publicado por nick (8 intervenciones) el 08/01/2019 20:44:49
muchas gracias por su oportuna respuesta casi todo queda claro,no logro entender bien esta parte 0 AS salidas FROM [mov_Entradas$] " & _
" Union ALL SELECT id_p, 0,es decir que ¿si esta sumando la columna entradas,salidas es cero,si esta seleccionando la columna salidas entradas entonces es cero? perdone mi ignorancia,¿habra una forma de modificar este codigo de manera que sea mas comprensible para novatos como yo? gracias por tomarse un tiempo y ayudar con estas inquietudes 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
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

codigo para encontrar saldos

Publicado por Isaias (1921 intervenciones) el 08/01/2019 22:07:21
El 0 (cero) es el VALOR FIJO, el AS le indica al SELECT que le ponga un NOMBRE DE COLUMNA a ese valor cero, en su caso la columna se llamara: salidas

Se estan desarrollando DOS SELECT, voy a modificar sus SELECT poniendo los AS con [MAYUSCULAS]

1
2
3
SELECT id_p AS [PROD_ID], cantidad AS [ENTRADAS], 0 AS [SALIDAS] FROM [mov_Entradas$]
UNION ALL
SELECT id_p AS [PROD_ID], 0 AS [ENTRADAS], cant as [SALIDAS] FROM [Mov_Salidas$]

Como se esta haciendo un UNION ALL entre ambos SELECT, deben tener EXACTAMENTE las mismas columnas ambos SELECT, por eso es que pone 0, VALOR FIJO, en ambos select, uno para ENTRADAS y otro para SALIDAS

¿Queda mas claro?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 18
Ha disminuido su posición en 2 puestos en SQL (en relación al último mes)
Gráfica de SQL

codigo para encontrar saldos

Publicado por nick (8 intervenciones) el 09/01/2019 16:01:14
MUCHAS GRACIAS SEÑOR ISAIAS,HABRA UN CODIGO QUE HAGA LO MISMO PERO MAS SENCILLO,UN CORDIAL SALUDO,DENO SER POSIBLE AGRADEZCO LA AYUDA HASTA AHORA
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
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

codigo para encontrar saldos

Publicado por Isaias (1921 intervenciones) el 09/01/2019 16:28:48
Cada quien mata la araña como mejor le parezca, el que desarrollo el código siguio la lógica del MANEJO DE CONJUNTOS, tienes DOS conjuntos, ENTRAS y SALIDAS (que son DOS select con un UNION), de ahi, puedes sacar el total haciendo una vil resta.

No veo mayor problema en comprender el codigo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 18
Ha disminuido su posición en 2 puestos en SQL (en relación al último mes)
Gráfica de SQL

codigo para encontrar saldos

Publicado por nick (8 intervenciones) el 11/01/2019 17:48:19
HOLA DE NUEVO AUNQUE EL CODIGO QUE SUMINISTRE FUNCIONA MUY BIEN AUN NO DOMINO EL TEMA DE LOS MULTISELECT,ESTOY EN ELLO VIENDO TUTOS EN LA WEB,REPITO SOY NUEVO EN ESTO ,CON LO POCO QUE SE DISEÑE YO UN MODELO DE CODIGO PERO AL FINAL SIGUE ARROJANDO EL MISMO ERROR EL CUAL SEGUN ENTENDI EN LA WEB SE DEBE A CAMPOS NULOS POR ESO ES QUE ME DA LOS SALDOS ERRADOS,PARTIENDO DE AHI HICE ESTE CODIGO PERO SIN EXITO

Sql = "SELECT P.CODIGO,P.ARTICULO,IIF(ISNULL(SUM(E.CANTIDAD)),0,SUM(E.CANTIDAD))AS ENTRADA," & _
" IIF(ISNULL(SUM(S.CANT)),0,SUM(S.CANT)) AS SALIDA," & _
" ENTRADA-SALIDA AS SALDO,AVG(E.PRECIO) AS PROMEDIO,SALDO*PROMEDIO AS TOTAL FROM ([PRODUCTOS$]P INNER JOIN" & _
" [MOV_ENTRADAS$]E ON P.ID=E.ID_P)" & _
" INNER JOIN [MOV_SALIDAS$]S ON P.ID=S.ID_P GROUP BY P.CODIGO,P.ARTICULO"

PERDONE TANTA INSISTENCIA,COMPRENDIENDO MIS LIMITACIONES ¿ ES POSIBLE QUE USTED ME AYUDE A MEJORAR ESTE CODIGO? ES MI MANERA DE " MATAR LA ARAÑA",SALUDOS Y DISCULPE LAS MOLESTIAS QUE ESTA PETICION LE PUEDA CAUSAR,AQUI DEJO EL ARCHIVO PARA MAYOR COMPRENSION MUCHAS GRACIAS DE ANTEMANO https://drive.google.com/open?id=13iRr3PPT36piC6KfVXKeSAIMr0YT_dBA
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