Avatar billede wordwrap Nybegynder
02. september 2009 - 12:53 Der er 6 kommentarer og
1 løsning

find laveste kost pris, på lager

Hej,

Har en tabel med følgende felter:
VareId, LeverandørID, KostPris, LagerAntal

Har brug for et statement som returnere laveste kostpris hvor lagerAntal > 0, hvis alle er 0, skal der returneres en middel værdi af alle kostpriser.

Nogen som har gode forslag til hvordan dette løses ?

På forhånd tak...
Avatar billede hrc Mester
02. september 2009 - 13:10 #1
Det er altså ikke en god idé at bruge danske tegn i en database.
Jeg ville lave to scripts. Det er simplest og det vil ikke kunne mærkes.

select min(KostPris)
from Lager
where (LagerAntal > 0)
  and (KostPris > 0)

Hvis det returnerer null ville jeg fyre script nr. 2 afsted

select avg(KostPris)
from Lager
where (KostPris > 0) -- Skal denne her så med?

Det lyder som en lidt kreativ prissætningsalgoritme.
Avatar billede wordwrap Nybegynder
02. september 2009 - 13:29 #2
De danske tegn er så heller ikke i selve databasen, feltnavnene i eksemplet er blot lidt fordansket.

jeg var lidt på jagt efter et samlet statement (ved ikke om det er muligt), da det så skulle strikkes ind i et andet statement lidt alla:

select Parts.Description, (statement til pris) as cost from... osv..

men hvis det ikke er muligt, kan der jo laves en funtion som returnere costprisen ud fra de kriterier.

Og jo lidt kreativt er det da... men det er hvad man har fået besked på... så må det jo løses....
Avatar billede Slettet bruger
02. september 2009 - 15:46 #3
Hvis du kunne ændre tabellen så den havde en ekstra række ved navn PåLager, som indeholdet et er hvis varen var på lager, og et nul hvis den ikke var, kunne du bruge en query som denne:

SELECT min(KostPris) as minPris, avg(KostPris) as avgPris, PåLager FROM Lager WHERE (KostPris > 0) and (PåLager = max(PåLager))

og lidt pseudokode:

if (resultat[PåLager] == 1)
  pris = resultat[minPris]
else
  pris = resultat[avgPris]
Avatar billede HenrikSjang Nybegynder
02. september 2009 - 20:17 #4
Er det kun kostprisen du vil have ud?

Denne giver dig VareNr samt kostpris ud fra dine specs:

SELECT
    VareId,
    CASE WHEN SUM(LagerAntal) = 0 THEN AVG(KostPris) ELSE MIN(KostPris) END AS KostPris   
FROM MyTable
GROUP BY VareId
Avatar billede wordwrap Nybegynder
03. september 2009 - 08:41 #5
sjang, ser faktisk rigtig meget ud som om det er noget der virker. Så den løsning skal der helt sikkert kigges lidt nærmere på.

Men alt i alt var jeg sådan set endt ud med en løsning lidt inspireret af hrc, så ved ikke om i er friske på en deler af de point ?
Avatar billede hrc Mester
03. september 2009 - 11:14 #6
Jeg synes nu ikke min løsning skinner meget igennem. Snup du bare de points, Sjang.
Avatar billede HenrikSjang Nybegynder
03. september 2009 - 17:05 #7
Meget fint :)
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
Computerworld tilbyder specialiserede kurser i database-management

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