Multidesk.be » Forums » Programmeren algemeen » SQL optellen in verschillende tabels

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door een gast op woensdag 1 april 2009 om 17:33:18.
Hey kan iemand me helpen ??
Ik kan er niet aan uit ... ben al heel de dag aan t zoeken !

Ik probeer twee tabellen, de sum samen te tellen

Ik heb een tabel orders ; id , order_date ,
een tabel orders_bestel; id , order_id , qty , unit_price , vat_code
een tabel invoices; id , due_date , order_id
een tabel invoices_bestel;id , invoice_id , qty , unit_price , vat_code

nu wil ik de totalen samen tellen maar aan de hand van datum <= vandaag

als resultaat zou ik dan willen ; vb
YEAR | totalenOrders | totalenInvoices
2009 | 2550.50 | 1005.20

hier is een vb query die ik gemaakt heb
Dit is met UNION ... maar niet goed
SQL Code:
CODE
  1. SELECT orders.order_date AS date, YEAR(orders.order_date) AS showyear,
  2.     SUM(orders_entrys.unit_price * orders_entrys.qty + (orders_entrys.unit_price * orders_entrys.qty/100 *orders_entrys.vat_code)) AS totalOrders
  3.  FROM orders
  4.  LEFT OUTER JOIN orders_entrys ON orders.id = orders_entrys.order_id
  5.  GROUP BY YEAR(orders.order_date)
  6.  HAVING date <= date(now())
  7. UNION
  8.  SELECT invoices.due_date AS date, YEAR(invoices.due_date) AS showyear,
  9.     SUM(invoices_entrys.unit_price * invoices_entrys.qty + (invoices_entrys.unit_price * invoices_entrys.qty/100 *invoices_entrys.vat_code))
  10.     AS   totalInvoices
  11.  FROM invoices
  12.  LEFT OUTER JOIN invoices_entrys ON invoices.id = invoices_entrys.invoice_id
  13.  GROUP BY YEAR(invoices.due_date)
  14.  HAVING date <= date(now())


Dit is met subquery ... de totalen zijn er maar verkeerd
SQL Code:
CODE
  1. SELECT orders.order_date AS date, YEAR(orders.order_date) AS showyear,
  2.  tblInvoices.totalInvoices AS totalOrders,
  3.  tblInvoices.totalInvoices AS totalInvoices
  4.  FROM orders
  5.  LEFT OUTER JOIN invoices ON orders.id = invoices.order_id
  6.  LEFT OUTER JOIN (SELECT order_id,
  7.      SUM(orders_entrys.unit_price * orders_entrys.qty + (orders_entrys.unit_price * orders_entrys.qty/100 *orders_entrys.vat_code))
  8.      AS totalOrders
  9.     FROM orders_entrys GROUP BY order_id) AS tblOrders
  10.       ON orders.id = tblOrders.order_id
  11.  LEFT OUTER JOIN
  12.     (SELECT invoice_id,
  13.      SUM(invoices_entrys.unit_price * invoices_entrys.qty + (invoices_entrys.unit_price * invoices_entrys.qty/100 *invoices_entrys.vat_code))
  14.      AS totalInvoices
  15.     FROM invoices_entrys GROUP BY invoice_id)
  16.     AS tblInvoices
  17.   ON invoices.id = tblInvoices.invoice_id
  18.  GROUP BY YEAR(orders.order_date)
  19.  HAVING date <= CURDATE()

Ik kom de som van totaalOrders + de totalen van de som van totaalInvoices X2 uit
en voor totaalInvoices kom ik de som uit X2 ??

Kan iemand me helpen ?

Opmerking van de crew

Ik heb even je SQL code in tags gezet voor de overzichtelijkheid ;)
SMG
Deze tekst werd het laatst bewerkt voor 0.62 % door SMG op woensdag 1 april 2009 om 17:47:50.
^ Reactie #1 geschreven door NightCreature op woensdag 1 april 2009 om 21:16:51.
NightCreature's avatar
Multiviteit: 1196
MSc.
CODE
  1.  
  2. SELECT SUM(ob.qty * ob.unit_price), o.order_date
  3. FROM orders AS o, orders_bestel AS ob
  4. WHERE o.id == ob.id AND ob.date == date(datum die je zelf kiest)
  5.  

Dit geeft de som van alle orders die een bepaalde datum hebben zonder rekening te houden met belastingen

CODE
  1.  
  2. SELECT SUM(ib.qty * ib.unit_price), i.order_date
  3. FROM invoices AS i, invoices_bestel AS ib
  4. WHERE i.id == ib.id AND ib.date == date(datum die je zelf kiest)
  5.  

Dit geeft je alle invoices gesommeerd weer zonder belastingen en voor een bepaalde dataum.
Ik ken niet genoeg SQL om deze queries samen te voegen in een Tabel die wordt trg gegeven.

Inner en outer joins maken je querry alleen maar lastiger. Zoals altijd in IT zorg eerst dat het werkt en ga dan pas optimaliseren.
Deze tekst werd het laatst bewerkt voor 7.19 % door NightCreature op woensdag 1 april 2009 om 21:21:08.
I need thought completion.
Shaders, een beetje vreemd maar wel lekker (voor de ogen dan he)
2.83Ghz Q9550 HD4850 512MiB 4GiB 1333Mhz DDR3 RAM
http://paulintheuk.blogspot.com
FE Programmer @ Codemasters (Front End)
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen