/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MSSQL: procent, div med 0
Fra : Leif Neland


Dato : 03-10-06 07:38

Jeg vil gerne kunne vælge de x varer med højst rabatprocent.

Men jeg har kun pris og rabat

En "order by rabat/pris desc" vil skulle lave divisionerne for alle rækker
hver gang.
Og så er der problemet med division med nul, hvis en vare ikke har en pris.

Hvis jeg laver en kolonne i databasen, der defineres som formlen rabat/pris,
vil den så blive gemt eller beregnet hver gang?
Og igen, division med nul?

Eller skal jeg manuelt lave en kolonne med rabat/pris, og sætte den selv,
hver gang jeg opdaterer?

Leif





 
 
Jens Gyldenkærne Cla~ (03-10-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 03-10-06 08:57

Leif Neland skrev:

> En "order by rabat/pris desc" vil skulle lave divisionerne for
> alle rækker hver gang.

Hvor stor er tabellen? Ved mindre tabeller vil der ikke være noget
problem i en beregning fra gang til gang. Til en større tabel kan
du måske benytte et materialiseret view (view med index).

> Og så er der problemet med division med nul, hvis en vare ikke
> har en pris.

Hvis varen ikke har en pris, er prisen NULL (eller det bør den i
hvert fald være) - og så er der ingen fejl (X/NULL = NULL)

Men hvis du kan have gratis varer (pris = 0) i basen, skal du tage
højde for division med 0.

Her er to muligheder til det:

   CASE pris WHEN 0 THEN 0 ELSE rabat/pris END

   rabat/NULLIF(pris, 0)

Den første returnerer 0 når prisen er 0, den anden returnerer NULL.


> Hvis jeg laver en kolonne i databasen, der defineres som
> formlen rabat/pris, vil den så blive gemt eller beregnet hver
> gang?

Så vidt jeg ved vil den blive gemt/opdateret hver gang rækken
opdateres (eller muligvis kun når kildefelterne bliver opdateret).

Men det er IMO en uskik at anvende (auto)beregnede felter i en
database. Så vidt jeg husker kan det bl.a. give problemer med visse
vedligeholdelsesprocedurer.
--
Bolig søges. Andel eller leje i Emdrup, Nordvest, Nørrebro, Søborg
eller Brønshøj, max 6000 pr. måned.
Kontakt pr. mail - nospam(at)gyros.dk
Jens Gyldenkærne Clausen

Michael Zedeler (03-10-2006)
Kommentar
Fra : Michael Zedeler


Dato : 03-10-06 18:54

Leif Neland wrote:
> Jeg vil gerne kunne vælge de x varer med højst rabatprocent.
>
> Men jeg har kun pris og rabat
>
> En "order by rabat/pris desc" vil skulle lave divisionerne for alle rækker
> hver gang.
> Og så er der problemet med division med nul, hvis en vare ikke har en pris.

Det kan løses med en IF eller CASe-sætning. Se Jens' svar.

> Hvis jeg laver en kolonne i databasen, der defineres som formlen rabat/pris,
> vil den så blive gemt eller beregnet hver gang?
> Og igen, division med nul?

Den slags laver man views til.

> Eller skal jeg manuelt lave en kolonne med rabat/pris, og sætte den selv,
> hver gang jeg opdaterer?

Nej. Så risikerer du bare at få inkonsistente data.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Peter Lykkegaard (03-10-2006)
Kommentar
Fra : Peter Lykkegaard


Dato : 03-10-06 21:34

Michael Zedeler wrote:
>
> Det kan løses med en IF eller CASe-sætning. Se Jens' svar.
>
"Case" - "If" kan ikke bruges i view - svjv :)

- Peter

--
Hi! I'm a .signature *virus*!
Copy me into your ~/.signature to help me spread!



Jens Gyldenkærne Cla~ (03-10-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 03-10-06 22:08

Peter Lykkegaard skrev:

>> Det kan løses med en IF eller CASe-sætning. Se Jens' svar.
>>
> "Case" - "If" kan ikke bruges i view - svjv :)

Det er ikke noget problem at lave et view med CASE i MSSQL 2005
(har ikke lige en 2000 ved hånden, men mener også det virker der).

IF (der ikke har noget med CASE at gøre) kan til gengæld ikke
anvendes i en forespørgsel - og dermed heller ikke i et view.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409077
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste