Autor
|
Tema: RegDupli (Leído 7,044 veces)
|
noobdai
Desconectado
Mensajes: 27
|
Hola buenas,tengo un problema respecto a esta sentencia. Me salen registros duplicados según el número de líneas de pedido en el detalle de albaran que estoy buscando.
//////////////////////////////////////SENTENCIA SQL////////////////////////////////////////// SELECT EMPRESA.CIFNIF, CABALBARAN.CLIENTE, CLIENTES.NOMBRE, DETALBARAN.IDALBARAN, CABALBARAN.FECHA, (SELECT SUM(DETALBARAN.CANTIDAD*DETALBARAN.PRECIO) FROM DETALBARAN WHERE CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE=CABALBARAN.CLIENTE ) AS "TOTAL_BRUTO", (SELECT SUM((DETALBARAN.CANTIDAD*DETALBARAN.PRECIO)*DETALBARAN.DESCUENTO/100) FROM DETALBARAN WHERE CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE=CABALBARAN.CLIENTE ) AS "TOTAL_DESCUENTO"
FROM EMPRESA, CLIENTES, DETALBARAN, CABALBARAN
WHERE CABALBARAN.CLIENTE =16 AND CABALBARAN.FECHA BETWEEN '13/01/10' AND '15/01/10' AND CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE = CABALBARAN.CLIENTE
///////////////////////////////RESULTADO///////////////////////////////////////////////
2 filas mismos datos
Saludos
PD:El único problema es que se repite,lo demás está bien.
|
|
« Última modificación: 3 Marzo 2010, 22:17 pm por noobdai »
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
Valgame... no han utilizado llaves primarias ni unicas ahi porque tienes datos redundantes y eso no es correcto. (aunque no te culpo) A tu consulta SQL agregale GROUP BY CLIENTE por ejemplo mas o menos: SELECT EMPRESA.CIFNIF, CABALBARAN.CLIENTE, CLIENTES.NOMBRE, DETALBARAN.IDALBARAN, CABALBARAN.FECHA, (SELECT SUM(DETALBARAN.CANTIDAD*DETALBARAN.PRECIO) FROM DETALBARAN WHERE CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE=CABALBARAN.CLIENTE ) AS "TOTAL_BRUTO", (SELECT SUM((DETALBARAN.CANTIDAD*DETALBARAN.PRECIO)*DETALBARAN.DESCUENTO/100) FROM DETALBARAN WHERE CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE=CABALBARAN.CLIENTE ) AS "TOTAL_DESCUENTO" FROM EMPRESA, CLIENTES, DETALBARAN, CABALBARAN WHERE CABALBARAN.CLIENTE =16 AND CABALBARAN.FECHA BETWEEN '13/01/10' AND '15/01/10' AND CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE = CABALBARAN.CLIENTE GROUP BY CLIENTE
|
|
|
En línea
|
|
|
|
noobdai
Desconectado
Mensajes: 27
|
Lo he probado tambien...pero me sale este error
GROUP BY CABALBARAN.CLIENTE Error at Command Line:2 Column:5 Error report: SQL Error: ORA-00979: no es una expresión GROUP BY
|
|
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
sql server no??? aveces detesto los motores tan explicitos Utiliza otro campo en GROUP BY que no utilizes aca: CABALBARAN.CLIENTE =16 AND CABALBARAN.FECHA BETWEEN '13/01/10' AND '15/01/10' AND CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE = CABALBARAN.CLIENTE pero que exista en una de las tablas.
|
|
|
En línea
|
|
|
|
noobdai
Desconectado
Mensajes: 27
|
He probado con CIFNIF y fecha..me sale el mismo error Saludos PD:Utilizo Oracle
|
|
« Última modificación: 1 Marzo 2010, 19:38 pm por noobdai »
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
Disculpa... en el momento que respondia aca estaba en el trabajo, y me era dificil coordinarme de tantas maneras y ofrecerte una respuesta valida.
Oracle por otro lado es muy estricto con su sintaxis.... no tanto como MySQL.
Intenta hacer esto:
SELECT EMPRESA.CIFNIF, CABALBARAN.CLIENTE, CLIENTES.NOMBRE, DETALBARAN.IDALBARAN, CABALBARAN.FECHA, (SELECT SUM(DETALBARAN.CANTIDAD*DETALBARAN.PRECIO) FROM DETALBARAN WHERE CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE=CABALBARAN.CLIENTE ) AS "TOTAL_BRUTO", (SELECT SUM((DETALBARAN.CANTIDAD*DETALBARAN.PRECIO)*DETALBARAN.DESCUENTO/100) FROM DETALBARAN WHERE CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE=CABALBARAN.CLIENTE ) AS "TOTAL_DESCUENTO"
FROM EMPRESA, CLIENTES, DETALBARAN, CABALBARAN
WHERE CABALBARAN.CLIENTE =16 AND CABALBARAN.FECHA BETWEEN '13/01/10' AND '15/01/10' AND CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE = CABALBARAN.CLIENTE GROUP BY (EMPRESA.CIFNIF, CABALBARAN.CLIENTE, CLIENTES.NOMBRE, DETALBARAN.IDALBARAN, CABALBARAN.FECHA )
Ocurre ser que en los JOINS de varias tablas en Oracle, en GROUP BY hay que incluir todos los campos especificados del SELECT, ya que el tiene que agrupar elementos unicos por cada tabla incluida en el JOIN.
Tambien puedes obviar GROUP BY y utilizar la clausula DISTINCT despues del SELECT y antes de los campos es otra manera.
Dime si te funciona
|
|
« Última modificación: 2 Marzo 2010, 01:23 am por ^TiFa^ »
|
En línea
|
|
|
|
noobdai
Desconectado
Mensajes: 27
|
Lo primero Tifa...Muchas gracias por tu interés He probado con la sentencia que me has puesto..y me sale este error: Error at Command Line:7 Column:84 Error report: SQL Error: ORA-00979: no es una expresión GROUP BYEn cuanto a la utilización del DISTINCT..¿es de esta forma?: SELECT DISTINCT EMPRESA.CIFNIF, DISTINCT CABALBARAN.CLIENTE, DISTINCT CLIENTES.NOMBRE, DISTINCT DETALBARAN.IDALBARAN, DISTINCT CABALBARAN.FECHA, DISTINCT (SELECT SUM(DETALBARAN.CANTIDAD*DETALBARAN.PRECIO) FROM M5DETALBARAN WHERE CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE=CABALBARAN.CLIENTE ) AS "TOTAL_BRUTO", DISTINCT (SELECT SUM((DETALBARAN.CANTIDAD*DETALBARAN.PRECIO)*DETALBARAN.DESCUENTO/100) FROM DETALBARAN WHERE CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE=CABALBARAN.CLIENTE ) AS "TOTAL_DESCUENTO"
FROM EMPRESA, CLIENTES, DETALBARAN, CABALBARAN
WHERE CABALBARAN.CLIENTE =16 AND CABALBARAN.FECHA BETWEEN '13/01/10' AND '15/01/10' AND CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE = CABALBARAN.CLIENTEMe sale este error: Error at Command Line:3 Column:5 Error report: SQL Error: ORA-00936: falta una expresiónPD:Lo he probado también suprimiendo los DISTINCT a los campos de cálculo. Saludos
|
|
« Última modificación: 3 Marzo 2010, 18:47 pm por noobdai »
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
SELECT EMPRESA.CIFNIF, CABALBARAN.CLIENTE, CLIENTES.NOMBRE, DETALBARAN.IDALBARAN, CABALBARAN.FECHA, SUM(DETALBARAN.CANTIDAD*DETALBARAN.PRECIO) AS "TOTAL_BRUTO", SUM((DETALBARAN.CANTIDAD*DETALBARAN.PRECIO)*DETALBARAN.DESCUENTO/100) AS "TOTAL_DESCUENTO"
FROM EMPRESA, CLIENTES, DETALBARAN, CABALBARAN
WHERE CABALBARAN.CLIENTE =16 AND CABALBARAN.FECHA BETWEEN '13/01/10' AND '15/01/10' AND CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE = CABALBARAN.CLIENTE AND CABALBARAN.IDALBARAN=DETALBARAN.IDALBARAN AND CLIENTES.IDCLIENTE=CABALBARAN.CLIENTE GROUP BY (EMPRESA.CIFNIF, CABALBARAN.CLIENTE, CLIENTES.NOMBRE, DETALBARAN.IDALBARAN, CABALBARAN.FECHA )
|
|
|
En línea
|
|
|
|
noobdai
Desconectado
Mensajes: 27
|
ajjajaja bieeeeeeen Gracias ^Tifa^ ya ha funcionado. Voy a intentar corregir otras sentencias que tengo para ver si puedo solucionar este mismo problema. ¿Me podrías enviar tu correo por MP,por si tengo problemas? Muchas Gracias Saludos
|
|
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
De nada
|
|
|
En línea
|
|
|
|
|
|