Avatar billede triggy Nybegynder
31. juli 2008 - 17:14 Der er 1 løsning

Optimering af SQL-sætning

Jeg har 4 tabeller, 1 med varenumre, 1 med ordrelinier, 1 med momssatser og 1 med lagerbeholdninger.

tbl_Items:
CompanyID - Tekst
ItemID - Tekst
Text - Tekst
Unit - Tekst
Price - Valuta
useStock - Ja/Nej
supplierID - Text
discontinued - Tal

tbl_OrderDetail:
CompanyID - Tekst
ItemID - Tekst
Qty - Tal

tbl_VAT:
VATID - Autonummer
VATIndex - Valuta

tbl_Stock
CompanyID - Tekst
ItemID - Tekst
depID - Tal
inStock - Tal


Jeg skal bruge et udtræk med varedetaljer fra varenummer-tabellen, sammen med hvormange af varen der er i ordre, og hvilken udsalgspris den er sat til.
Det er sådan set simpelt nok, og det er her de 3 første tabeller bliver brugt.
Problemet kommer når jeg skal bruge hvormange der er på lager i den enkelte afdeling, samt lagerantal for hele firmaet. Så tager den uhyggeligt lang tid om at finde recordsettet. Vi snakker 20 minutter ca.

Jeg regner med at det er fordi jeg har sat joins op forkert. men min hjerne er efterhånden kortsluttet af at kigge på det :)

min sql (som er langsom):
SELECT tbl_Items.CompanyID, tbl_Items.ItemID, tbl_Items.Text, tbl_Items.Unit, ([tbl_Items]![Price]+([tbl_Items]![Price]*[tbl_VAT]![VATIndex])) AS Price, Sum(tbl_OrderDetail.Qty) AS SumOfQty, tbl_Items.useStock, Sum(tbl_Stock_1.inStock) AS SumOfinStock, tbl_Stock.inStock
FROM tbl_Stock AS tbl_Stock_1 INNER JOIN (tbl_Stock INNER JOIN ((tbl_Items LEFT JOIN tbl_OrderDetail ON (tbl_Items.ItemID = tbl_OrderDetail.ItemID) AND (tbl_Items.CompanyID = tbl_OrderDetail.CompanyID)) INNER JOIN tbl_VAT ON tbl_Items.VATID = tbl_VAT.VATID) ON (tbl_Items.ItemID = tbl_Stock.ItemID) AND (tbl_Stock.CompanyID = tbl_Items.CompanyID)) ON (tbl_Items.ItemID = tbl_Stock_1.ItemID) AND (tbl_Stock_1.CompanyID = tbl_Items.CompanyID)
GROUP BY tbl_Items.CompanyID, tbl_Items.ItemID, tbl_Items.Text, tbl_Items.Unit, ([tbl_Items]![Price]+([tbl_Items]![Price]*[tbl_VAT]![VATIndex])), tbl_Items.useStock, tbl_Stock.inStock, tbl_Items.ItemID, tbl_Items.CompanyID, tbl_Items.Text, tbl_Items.supplierID, tbl_Items.discontinued, tbl_Stock.depID
HAVING (((tbl_Items.CompanyID)='1003') AND ((tbl_Items.discontinued)=0) AND (tbl_Stock.depID=1))
ORDER BY tbl_Items.ItemID;

Håber der er nogen der kan gennemskue det
Avatar billede triggy Nybegynder
24. august 2008 - 22:22 #1
lukket. arbejder på et alternativt indhold i udtrækket istedet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester