[SQL] Vermenigvuldigen met 0

Pagina: 1
Acties:
  • 249 views sinds 30-01-2008
  • Reageer

  • Vozze
  • Registratie: December 2001
  • Laatst online: 22-05 20:39
Ik heb het volgende probleem.
Met een SELECT statement wil ik een vermenigvuldiging uitvoeren met 3 getallen. Nu kan het voorkomen dat 1 van deze waarden 0 is (dus niet NULL). Nu wil ik dat het resultaat niet 0 wordt, maar de uitkomst van de vermenigvuldiging van de andere 2 getallen.

Voorbeeld 1:
Waarde a = 3, Waarde b = 5, Waarde c = 3
Uitkomst 45 (logisch).

Waarde a = 3, Waarde b = 0, Waarde c = 4
Uitkomst 0 (nu wil ik dus dat hier 12 komt (3 x 4)).

Als het ware moet de 0 dus vervangen worden door een 1.

Iemand tips?

"He who thinks knows evertyhing, knows nothing" - Socrates


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Welk DBMS gebruik je?

In SQL Server kan je bv. een CASE statement in je query verwerken. Met dat CASE statement kan je dan de waarde van die velden. Als een van die velden 0 is, zorg je ervoor dat hij de waarde van dat veld op 1 zet.

bv:
code:
1
2
3
4
5
SELECT @var1 = CASE veld1
                   WHEN 0 THEN 1
                   ELSE veld1
                END 
             * @var2 = ....

Wel pseudo-code, ik ken de syntax van dat CASE statement niet van buiten. :P

[ Voor 4% gewijzigd door whoami op 08-12-2003 15:51 ]

https://fgheysels.github.io/


  • -=bas=-
  • Registratie: Oktober 2000
  • Laatst online: 22-04-2025
Default een 1 in laten vullen ipv een nul? :)
Een andere oplossing om het in 1 query te doen zou ik niet zo snel weten.

Senile! Senile Oekaki


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

whoami:
Welk DBMS gebruik je?

[snip case/when/then/else voorbeeldje]
MySQL kent iets dergelijks met IF:
code:
1
SELECT IF(veld=0, 1, veld) ...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Danfoss
  • Registratie: Mei 2000
  • Laatst online: 16:37

Danfoss

Deze ruimte is te koop..

Met Oracle kan je een decode gebruiken:
code:
1
2
3
4
Select decode(waardeA,0,1,waardeA)
        * decode(waardeB,0,1,waardeB)
        * decode(waardeC,0,1,waardeC)
From tabel

Sys Specs


  • Vozze
  • Registratie: December 2001
  • Laatst online: 22-05 20:39
whoami schreef op 08 december 2003 @ 15:51:
Welk DBMS gebruik je?

In SQL Server kan je bv. een CASE statement in je query verwerken. Met dat CASE statement kan je dan de waarde van die velden. Als een van die velden 0 is, zorg je ervoor dat hij de waarde van dat veld op 1 zet.
Ik maak gebruik van Sybase

"He who thinks knows evertyhing, knows nothing" - Socrates


  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
Hoe kom je aan die getallen?
Kun je ze niet voordat je ze in je query stopt controleren en eventueel veranderen?

Pas de replâtrage, la structure est pourrie.


  • polson
  • Registratie: Januari 2001
  • Laatst online: 16:47
En Sybase kent het case statement sinds de laatse paar versies (>= 11.9 geloof ik)

8)

Verwijderd

Danfoss schreef op 08 december 2003 @ 15:56:
Met Oracle kan je een decode gebruiken:
code:
1
2
3
4
Select decode(waardeA,0,1,waardeA)
        * decode(waardeB,0,1,waardeB)
        * decode(waardeC,0,1,waardeC)
From tabel
En vanaf Oracle 8.1.x zelfs ook een case select in een query :) en vanaf 9i ook in PL/SQL.
Maar ik zie net dat het om Sybase gaat :P

  • Vozze
  • Registratie: December 2001
  • Laatst online: 22-05 20:39
Bedankt allemaal!

Ik heb het uiteindelijk zo opgelost:

code:
1
2
3
4
5
6
7
8
9
10
11
12
"AantalM2" = 
(SELECT SUM (CASE t3.UnitCode
    WHEN 1 THEN
    (t2.Qty * t3.SquareMeasure)
    WHEN 2 THEN
    (t2.Qty * t2.Length * t3.SquareMeasure)
    WHEN 3 THEN 
    (t2.Qty * t2.Length * t2.Width * t3.SquareMeasure)
END)
From T_ProdBillOfMat t2, T_Part t3
Where t2.SubPartCode = t3.PartCode AND
t2.ProdHeaderDossierCode = t1.ProdHeaderDossierCode

"He who thinks knows evertyhing, knows nothing" - Socrates


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
neem aan dat het gehele getallen betreft,
weet niet of je ook wiskundige functies kunt gebruiken anders kun je iets doen in de trend van:
code:
1
max(1, getal_1) * getal_2 * getal_3

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:32

.oisyn

Moderator Devschuur®

Demotivational Speaker

die max lijkt me wat minder handig, dan worden dingen als 0.5 ook niet meegerekend.

Dan is een IF (kolom=0, 1, kolom) misschien makkelijker
SQL:
1
select IF(k1=0, 1, k1) * IF(k2=0, 1, k2) * IF(k3=0, 1, k3) FROM tabel


.edit: was al gezegd |:(

[ Voor 12% gewijzigd door .oisyn op 08-12-2003 19:11 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Vozze
  • Registratie: December 2001
  • Laatst online: 22-05 20:39
.oisyn schreef op 08 december 2003 @ 18:02:
die max lijkt me wat minder handig, dan worden dingen als 0.5 ook niet meegerekend.

Dan is een IF (kolom=0, 1, kolom) misschien makkelijker
SQL:
1
select IF(k1=0, 1, k1) * IF(k2=0, 1, k2) * IF(k3=0, 1, k3) FROM tabel


.edit: was al gezegd |:(
Zou zeker makkelijker zijn, maar dit wordt niet ondersteund door Sybase

"He who thinks knows evertyhing, knows nothing" - Socrates


  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 21-04 16:00
code:
1
SELECT SUM(A,B,C) WHERE a>0 AND b>0 AND c>0


of denk ik nu te simpel

[ Voor 12% gewijzigd door Suepahfly op 08-12-2003 23:01 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Suepahfly:
code:
1
SELECT SUM(A,B,C) WHERE a>0 AND b>0 AND c>0


of denk ik nu te simpel
Ik denk simpel dat je gewoon niet goed leest ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Hmm

0 <> NULL
Pagina: 1