Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta a BD con distintos tipos de IVA

Estas en el tema de Consulta a BD con distintos tipos de IVA en el foro de Mysql en Foros del Web. Hola Buenas tardes; Soy nueva en el foro y llevo tiempo tratando de hacer una consulta en MYSQL desde las tablas de prestashop desde donde ...
  #1 (permalink)  
Antiguo 20/03/2013, 13:06
 
Fecha de Ingreso: marzo-2013
Ubicación: Madrid
Mensajes: 1
Antigüedad: 11 años, 1 mes
Puntos: 0
Pregunta Consulta a BD con distintos tipos de IVA

Hola Buenas tardes;
Soy nueva en el foro y llevo tiempo tratando de hacer una consulta en MYSQL desde las tablas de prestashop desde donde necesito obtener la identidad del cliente, el monto comprado, lo que pago y el tipo de iva al que esta afecto, como en españa hay mas de un tipo de iva se me a complicado bastante la consulta, esta es la consulta como la tengo ahora mismo y funciona más o menos bien.... el problema es que cuando la tabla de ordenes tiene impuesto de carrier no me coge ningun tipo de iva.

SELECT checkorder.id_order AS "Pedido Nº", checkorder.invoice_number AS
"Factura Nº", checkorder.date_add AS "Fecha Pedido",
(SELECT Sum(ps_order_detail.product_price * ps_order_detail.product_quantity)
FROM ps_orders INNER JOIN ps_order_detail ON ps_orders.id_order =
ps_order_detail.id_order INNER JOIN ps_customer ON ps_customer.id_customer
= ps_orders.id_customer AND ps_customer.secure_key = ps_orders.secure_key
WHERE ps_orders.id_lang = 3 AND ps_order_detail.id_order = checkorder.id_order
AND ps_order_detail.tax_rate = 4) AS IVA_4,
(SELECT Sum(ps_order_detail.product_price * ps_order_detail.product_quantity)
FROM ps_orders INNER JOIN ps_order_detail ON ps_orders.id_order =
ps_order_detail.id_order INNER JOIN ps_customer ON ps_customer.id_customer
= ps_orders.id_customer AND ps_customer.secure_key = ps_orders.secure_key
WHERE ps_orders.id_lang = 3 AND ps_order_detail.id_order = checkorder.id_order
AND ps_order_detail.tax_rate = 10) AS IVA_10,
(SELECT Sum(ps_order_detail.product_price * ps_order_detail.product_quantity)
FROM ps_orders INNER JOIN ps_order_detail ON ps_orders.id_order =
ps_order_detail.id_order INNER JOIN ps_customer ON ps_customer.id_customer
= ps_orders.id_customer AND ps_customer.secure_key = ps_orders.secure_key
WHERE ps_orders.id_lang = 3 AND ps_order_detail.id_order = checkorder.id_order
AND ps_order_detail.tax_rate = 21) AS IVA_21, checkorder.total_products AS
"Total sin IVA", checkorder.total_shipping AS "Gastos de Envío IVA Inc.",
checkorder.total_paid_real AS "Total IVA Inc.",
checkorder.invoice_date AS "Fecha Factura", ps_address.firstname,
ps_address.lastname, ps_address.dni AS "DNI/CIF/NIE",
checkorder.payment AS "Forma de Pago"
FROM ps_customer INNER JOIN
ps_orders AS checkorder ON ps_customer.id_customer = checkorder.id_customer
INNER JOIN
ps_address ON ps_address.id_address = checkorder.id_address_delivery
WHERE NOT checkorder.total_paid_real IN (0) AND checkorder.id_lang = 3

Desde ya les agradezco cualquier ayuda o recomendación,
Saludos y gracias nuevamene.
  #2 (permalink)  
Antiguo 20/03/2013, 16:04
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta a BD con distintos tipos de IVA

Hola curura:

Antes que nada bienvenido al foro, espero que te sea de utilidad. Ahora si, pasando a tu pregunta, sin datos de tu modelo de BD es imposible entender lo que pones... dime tú si realmente crees que podamos saber de qué estás hablando es más, me costaría pensar que tú mismo puedas tratar de entender qué es lo que que hace o pretende hacer tu consulta.

En lugar de eso tenemos que partir desde el inicio, postea la estructura de tus tablas, pon algunos datos de ejemplo para cada uno de ellos y dinos a partir de esos datos qué es lo que pretendes obtener como resultado. la verdad no creo
que haya necesidad de hacer tantas subconsultas como lo pretendes hacer, pero para darte una mejor respuesta necesitamos más datos.

Como recomendación adicional, trata de dar formato a tus consultas para que sean más legibles, por ejemplo en lugar de poner esto:

Código:
SELECT Sum(ps_order_detail.product_price * ps_order_detail.product_quantity)
FROM ps_orders INNER JOIN ps_order_detail ON ps_orders.id_order =
ps_order_detail.id_order INNER JOIN ps_customer ON ps_customer.id_customer
= ps_orders.id_customer AND ps_customer.secure_key = ps_orders.secure_key
WHERE ps_orders.id_lang = 3 AND ps_order_detail.id_order = checkorder.id_order
AND ps_order_detail.tax_rate = 4
Pon la consulta más o menos así:

Código MySQL:
Ver original
  1.   SUM(ps_order_detail.product_price * ps_order_detail.product_quantity)
  2. FROM ps_orders
  3. INNER JOIN ps_order_detail ON
  4.   ps_orders.id_order = ps_order_detail.id_order
  5. INNER JOIN ps_customer ON
  6.   ps_customer.id_customer = ps_orders.id_customer AND
  7.   ps_customer.secure_key = ps_orders.secure_key
  8.   ps_orders.id_lang = 3 AND
  9.   ps_order_detail.id_order = checkorder.id_order AND
  10.   ps_order_detail.tax_rate = 4

Es decir, trata de distinguir cada parte, el SELECT del FROM, el FROM de los JOIN's y los JOIN's del WHERE... así es mas sencillo tratar de entender lo que estás haciendo... Utiliza las etiquetas marcadas como Highligth para darle formato a tu código...

Alguna vez un profesor me dijo que cuando se hacen consultas como las que pones sólo Dios y Tú entienden lo que hacen, pero una semana después sólo Dios las entiende, porque ni tú tienes idea de lo que hiciste.

Saludos
Leo.
  #3 (permalink)  
Antiguo 22/03/2013, 02:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta a BD con distintos tipos de IVA

curura atiende los consejos de leonardo_josue, ayudar a ayudar da resultados, y bienvenid@.

En cuanto a tu problema... sin tener la estructura de tus tablas, no todo el mundo tiene el prestashop instaldo para mirar la estructura, te puedo dar un poco la logica....

Normalmente la estructura es

Facturas
id
NumFac
idCliente FK
fecha

Se trata de la cabecera de la factura en tu caso seguramente es ps_orders (no voy a hacer mas suposiciones como esta sobre tu estructura).

DetalleFactura
id
idFactura FK (relaciona con la factura)
idProducto FK
cantidad
tipoIva (supongamos que esta en tanto por uno es decir 21% IVA como 0.21)
precio (sin IVA)

Se trata como su nombre indica las lineas de la factura


Con estas dos tablas ya se puede calcular lo que pides....


Código MySQL:
Ver original
  1. SELECT f.idCliente,
  2.             MONTH(d.fecha) mes,
  3.             d.tipoIva,
  4.             SUM(d.cantidad*d.precio) Base,
  5.             SUM(d.cantidad*d.precio*d.tipoIva) IVA,
  6.             SUM(d.cantidad*d.precio*(1+d.tipoIva)) Total
  7. FROM facturas f INNER JOIN DetalleFactura d
  8.             ON f.id=d.idFactura
  9. GROUP BY f.idCliente,
  10.             MONTH(d.fecha),
  11.             d.tipoIva;

Ahi tienes la facturación mensual de cada cliente por tipos de IVA.

Analiza y adapta lo que sea pero no debería salirte nada muy distinto.

Le puedes agregar un join a clientes para poder ver el nombre del cliente o algun where para filtrar por fechas... por ejemplo por tirmestres quitando el mes (de la lista de campos y del group by) para que te salga el total del trimestre.... si quitas el cliente tendras el IVA cobrado...etc pero lo basico es eso... sin subconsultas.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 22/03/2013 a las 02:26

Etiquetas: bd, distintos, iva, join, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:13.