Toon posts:

[SQL] Kan 2 kolommen niet delen door elkaar.

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

Verwijderd

Topicstarter
Heey mensen ik zit met een sql probleempje.

Ik ben een query aan maken waarbij ik kan zien of er fouten zitten in verkoops prijs of in de inkoopsprijs.
Daarbij wouden we een query maken, en dan wouden we de kostprijs delen door de factbedragexcl.

Dit dachten wij simpel te doen door:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT 
    FACTUREEROPDRACHT.CDDEBITEUR, 
    FACTUREEROPDRACHT.FACTUUROPDRACHT, 
    FACTOPDRACHTREGEL.CDARTIKEL, 
'   FACTOPDRACHTREGEL.CDSTATUS, 
    FACTOPDRACHTREGEL.KOSTPRIJS, 
    FACTOPDRACHTREGEL.FACTBEDRAGEXCL, 
    FACTOPDRACHTREGEL.CDGRBREKENING, 
    KOSTPRIJS/FACTBEDRAGEXCL
FROM 
    SYSADM.FACTOPDRACHTREGEL FACTOPDRACHTREGEL, 
    SYSADM.FACTUREEROPDRACHT FACTUREEROPDRACHT
WHERE 
    (FACTOPDRACHTREGEL.CDARTIKEL>'0')
    AND
    (FACTOPDRACHTREGEL.CDGRBREKENING<>'5020')

offtopic:
sorry voor de hoofdletters, maar dit doet microsoft query

Maar het rare is dat KOSTPRIJS/FACTBEDRAGEXCL bij alles 0 terug geeft.
Resultaat: http://www.scootxtreme.nl/lib/hostees/kees/scr.jpg

Als ik bijvoorbeeld / door 3 doe ofzo dan geeft hij wel resultaat.

Volgens de help van microsoft query mag ik de volgende operators gebruiken in velden:
+ (plusteken) optellen
- (minteken) aftrekken
* (sterretje) vermenigvuldigen
/ (slash) delen

Het tweede probleem is dat ik een foutmelding krijg als ik bijvoorbeeld een veld een kopnaam wil geven zoals dit:
Afbeeldingslocatie: http://www.scootxtreme.nl/lib/hostees/kees/scr2.jpg
Geeft de volgende error:
Afbeeldingslocatie: http://www.scootxtreme.nl/lib/hostees/kees/scr3.jpg

Hopelijk weet iemand de oplossing(en)
Alvast erg bedankt!

[ Voor 5% gewijzigd door Verwijderd op 29-07-2004 11:44 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:49

Creepy

Tactical Espionage Splatterer

Hmm.. misschien toch iets te snel geweest.... :z

[ Voor 90% gewijzigd door Creepy op 28-07-2004 14:38 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Heel hoogstwaarschijnlijk zijn je prijzen integers, en inderdaad 120 / 145 is 0 op integerberekening. Maak van beide operands eens FLOATs middels CAST.

[ Voor 3% gewijzigd door curry684 op 28-07-2004 14:37 ]

Professionele website nodig?


Verwijderd

Topicstarter
Sorry maar ik weet niet echt wat je bedoelt, hoe zou ik dit dan moeten toepassen?

  • Equator
  • Registratie: April 2001
  • Laatst online: 22-05 19:52

Equator

Crew Council

🦺#Rodekruis #whisky #barista

Is het niet veel makkelijker om deze berekening door SQL zzelf te laten doen.
Dus een kolom toeveogen, met als formule deze berekening :?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 28 juli 2004 @ 14:45:
Sorry maar ik weet niet echt wat je bedoelt, hoe zou ik dit dan moeten toepassen?
Wat is het columntype van KOSTPRIJS en FACTBEDRAGEXCL?

En ik bedoel dus dit:
SQL:
1
SELECT CAST(KOSTPRIJS AS float) / CAST(FACTBEDRAGEXCL AS float) AS WinstRatio;

Professionele website nodig?


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Verwijderd schreef op 28 juli 2004 @ 14:33:
[...]

Als ik bijvoorbeeld / door 3 doe ofzo dan geeft hij wel resultaat.
[...]
Zijn alle bedragen factbedragexcl ongelijk aan 0? Er staat me vaag iets bij dat MS-query fouten in de uitvoering niet altijd even lekker opvangt.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Verwijderd schreef op 28 juli 2004 @ 14:45:
Sorry maar ik weet niet echt wat je bedoelt, hoe zou ik dit dan moeten toepassen?
Hij bedoelt dat het type van KOSTPRIJS/FACTBEDRAGEXCL geen integer moet wezen maar double/float. Dus de uitkomst van je berekening moet je niet als integer neerzetten, maar als float/double.

  • El_BingO
  • Registratie: Juli 2001
  • Laatst online: 22-04 10:47
code:
1
2
3
SELECT FACTUREEROPDRACHT.CDDEBITEUR, FACTUREEROPDRACHT.FACTUUROPDRACHT, FACTOPDRACHTREGEL.CDARTIKEL, FACTOPDRACHTREGEL.CDSTATUS, FACTOPDRACHTREGEL.KOSTPRIJS, FACTOPDRACHTREGEL.FACTBEDRAGEXCL, FACTOPDRACHTREGEL.CDGRBREKENING, CAST(KOSTPRIJS as numeric(18,2))/CAST(FACTBEDRAGEXCL as numeric(18,2)) as berekening
FROM SYSADM.FACTOPDRACHTREGEL FACTOPDRACHTREGEL, SYSADM.FACTUREEROPDRACHT FACTUREEROPDRACHT
WHERE FACTOPDRACHTREGEL.FACTUUROPDRACHT = FACTUREEROPDRACHT.FACTUUROPDRACHT AND ((FACTOPDRACHTREGEL.CDARTIKEL>'0') AND (FACTOPDRACHTREGEL.CDGRBREKENING<>'5020'))


zoiets dus?

Verwijderd

Topicstarter
Niesje schreef op 28 juli 2004 @ 14:52:
[...]

Zijn alle bedragen factbedragexcl ongelijk aan 0? Er staat me vaag iets bij dat MS-query fouten in de uitvoering niet altijd even lekker opvangt.
Ik heb nu als voorwaarde ingesteld: FACTBEDRAGEXCL > 0
en alsnog geeft hij overal 0 terug.

@ El_BingO
Ik heb je quoery gebrobeerd, maar hij gaf de volgende error:
Afbeeldingslocatie: http://www.scootxtreme.nl/lib/hostees/kees/scr4.jpg

Verwijderd

Topicstarter
niemand die me kan helpen ? :(

Wat betekend eigenlijk CAST ? een colum veranderen ofzo? Ik heb wel even gegoogled maar kan weinig tot niks vinden :(

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 28 juli 2004 @ 19:22:
niemand die me kan helpen ? :(

Wat betekend eigenlijk CAST ? een colum veranderen ofzo? Ik heb wel even gegoogled maar kan weinig tot niks vinden :(
Je maakt mij niet wijs dat je langer dan 30 seconden hebt geprobeerd als je op Google niet kan vinden wat een cast is. Uberhaupt mag je wel iets meer zelfwerkzaamheid tonen dan je hier in dit topic doet: je zit min of meer te wachten tot wij je query compleet schrijven, en da's dus niet de bedoeling. Het gaat er wel om dat jij het werk uiteindelijk zelf doet.

Professionele website nodig?


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Een CAST gebruik je om een bepaald type om te zetten naar een ander type. Je wijzigt de kolomdefinitie dus niet.

Wat informatie uit de SQL Server Books Online hierover

Today's subliminal thought is:


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Zit hier een MS-Jet database achter? Dan lijkt me CDbl() meer op z'n plaats dan Cast.

Maar currency kolommen moet je gewoon op elkaar kunnen delen. Er moet toch iets anders mis zijn. Maak eens een testtabelletje zonder overbodige zooi erin.

| Toen / Nu


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

El_BingO schreef op 28 juli 2004 @ 14:58:
[code]een beetje lange querycode]

zoiets dus?
Waarom CAST je de input van die deling :? Je hoeft toch alleen maar de uitkomst naar double/float te casten :? Nu ken ik die numeric trouwens niet, maar voor delingen gebruik ik dus meestal gewoon doubles/floats.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

eghie schreef op 28 juli 2004 @ 21:49:
[...]

Waarom CAST je de input van die deling :? Je hoeft toch alleen maar de uitkomst naar double/float te casten :? Nu ken ik die numeric trouwens niet, maar voor delingen gebruik ik dus meestal gewoon doubles/floats.
Denk even logisch na? :)

En voer anders even dit stukje code uit:
SQL:
1
2
3
4
5
6
CREATE TABLE Test (int1 int, int2 int);
INSERT Test VALUES (2, 3);
SELECT int1/int2 FROM Test;
SELECT CAST(int1/int2 AS FLOAT) FROM Test;
SELECT CAST(int1 AS FLOAT) / CAST(int2 AS FLOAT) FROM Test;
DROP TABLE Test;

En voorspel de uitkomsten vantevoren, want jij gokt ze duidelijk fout ;)

Professionele website nodig?


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

curry684 schreef op 28 juli 2004 @ 21:55:
[...]

Denk even logisch na? :)

En voer anders even dit stukje code uit:
SQL:
1
2
3
4
5
6
CREATE TABLE Test (int1 int, int2 int);
INSERT Test VALUES (2, 3);
SELECT int1/int2 FROM Test;
SELECT CAST(int1/int2 AS FLOAT) FROM Test;
SELECT CAST(int1 AS FLOAT) / CAST(int2 AS FLOAT) FROM Test;
DROP TABLE Test;

En voorspel de uitkomsten vantevoren, want jij gokt ze duidelijk fout ;)
Ow hahaha ja sorry, had hem niet gezien. :X |:( 8)7 Bij de 1e wist ik het zowieso wel, maar ik dacht dat de 2e wel gewoon zou werken, maar hij voert eerst de berekening uit (waar 0 uit komt) en die 0 zet hij pas om naar FLOAT.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

eghie schreef op 28 juli 2004 @ 22:05:
[...]

Ow hahaha ja sorry, had hem niet gezien. :X |:( 8)7 Bij de 1e wist ik het zowieso wel, maar ik dacht dat de 2e wel gewoon zou werken, maar hij voert eerst de berekening uit (waar 0 uit komt) en die 0 zet hij pas om naar FLOAT.
* curry684 aait eghie ;)

Professionele website nodig?


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

curry684 schreef op 28 juli 2004 @ 22:08:
[...]

* curry684 aait eghie ;)
:>

Vakantie is niet echt rustgevend merk ik al wel weer. O-) 8)7

Verwijderd

Topicstarter
Maar als ik het dus goed begrijp kun je met CAST de kolomdefinitie omleiden?

Overigens snap ik niet waarom ik de uitkomst als FLOAT moet omleiden omdat als de input niet goed is, kan de output toch ook nooit goed zijn? of zit ik nou vekreerd :?

Onze sql server=MUSQLE

Het lijkt er bijna op dat CAST bij MUSQLE een andere definitie moet hebben. Ik heb de volgende query gebrobeerd:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT 
    FACTUREEROPDRACHT.CDDEBITEUR,
    FACTUREEROPDRACHT.FACTUUROPDRACHT,
    FACTOPDRACHTREGEL.CDARTIKEL,
    FACTOPDRACHTREGEL.CDSTATUS,
    CAST(FACTOPDRACHTREGEL.KOSTPRIJS AS FLOAT),
    CAST(FACTOPDRACHTREGEL.FACTBEDRAGEXCL AS FLOAT),
    FACTOPDRACHTREGEL.CDGRBREKENING, 
    KOSTPRIJS/FACTBEDRAGEXCL
FROM 
    SYSADM.FACTOPDRACHTREGEL FACTOPDRACHTREGEL,
    SYSADM.FACTUREEROPDRACHT FACTUREEROPDRACHT
WHERE 
    (FACTOPDRACHTREGEL.CDARTIKEL>'0') 
AND
    (FACTOPDRACHTREGEL.CDGRBREKENING<>'5020')
AND 
    (FACTOPDRACHTREGEL.FACTBEDRAGEXCL>'0')

Zo meteen wat overzichtelijker gemaakt :P

Deze query geeft een error: "Onjuist colum expressie.
Dus volgens mij is de definitie/syntax fout van CAST die ik gebruik. ?

[ Voor 8% gewijzigd door Verwijderd op 29-07-2004 11:25 ]


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Ik ken MUSQLE niet (nooit van gehoor eig), maar ik weet wel dat je de cast verkeerd gebruikt. Je mag kostprijs en factbedragexcl wel gewoon als int terug geven hoor, maar bij de deling moet je die cast wel gebruiken, zodat het antwoord een komma getal word (float). Dus dan word het ongeveer zo:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT 
    FACTUREEROPDRACHT.CDDEBITEUR,
    FACTUREEROPDRACHT.FACTUUROPDRACHT,
    FACTOPDRACHTREGEL.CDARTIKEL,
    FACTOPDRACHTREGEL.CDSTATUS,
    FACTOPDRACHTREGEL.KOSTPRIJS,
    FACTOPDRACHTREGEL.FACTBEDRAGEXCL,
    FACTOPDRACHTREGEL.CDGRBREKENING, 
    CAST(FACTOPDRACHTREGEL.KOSTPRIJS AS FLOAT)/CAST(FACTOPDRACHTREGEL.FACTBEDRAGEXCL AS FLOAT)
FROM 
    SYSADM.FACTOPDRACHTREGEL FACTOPDRACHTREGEL,
    SYSADM.FACTUREEROPDRACHT FACTUREEROPDRACHT
WHERE 
    (FACTOPDRACHTREGEL.CDARTIKEL>'0') 
AND
    (FACTOPDRACHTREGEL.CDGRBREKENING<>'5020')
AND 
    (FACTOPDRACHTREGEL.FACTBEDRAGEXCL>'0')
Zoek de verschillen ;)

[ Voor 4% gewijzigd door eghie op 29-07-2004 11:36 ]


Verwijderd

Topicstarter
Dat is het rare namelijk, jouw query heb ik al 100x gebrobeerd. Hij zegt continu:
Afbeeldingslocatie: http://www.scootxtreme.nl/lib/hostees/kees/scr5.jpg

CONVERT heb ik ook gebrobeerd, zoals in de tutorial alleen die geeft ook dezelfde foutmelding :/

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Verwijderd schreef op 29 juli 2004 @ 11:42:
Dat is het rare namelijk, jouw query heb ik al 100x gebrobeerd. Hij zegt continu:
[afbeelding]

CONVERT heb ik ook gebrobeerd, zoals in de tutorial alleen die geeft ook dezelfde foutmelding :/
Dat betekent dat die CAST niet geldig is neergezet, waarschijnlijk moet je bij jou DBMS de CAST op een andere manier gebruiken.

Heb je geen documentatie voor je DBMS waar dat in staat, hoe je de CAST moet gebruiken :? En hoe word CONVERT in de tutorial beschreven :?

Ik lees trouwens net dat MuSQLe een rapportgenerator is en geen DBMS.

[ Voor 19% gewijzigd door eghie op 29-07-2004 11:53 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 29 juli 2004 @ 11:23:
Maar als ik het dus goed begrijp kun je met CAST de kolomdefinitie omleiden?
Met CAST laat je de compiler/interpreter een waarde als een ander type beschouwen.
Overigens snap ik niet waarom ik de uitkomst als FLOAT moet omleiden omdat als de input niet goed is, kan de output toch ook nooit goed zijn? of zit ik nou vekreerd :?
Stel je hebt 2 integer waardes 45 en 10. Een deling van 2 integers levert per definitie een integer resultaat op, waarbij een eventuele rest wordt weggeknikkerd: dus 45 / 10 = 4! Als je echter 2 floats door elkaar deelt krijg je een float resultaat, dus als je de integers eerst naar float converteert krijg je 45.0 / 10.0 = 4.5 :)

Het zou overigens genoeg moeten zijn om 1 van de 2 naar float te converteren, dan dwingt de 'wet van behoud van precisie' namelijk al een float resultaat af.
eghie schreef op 29 juli 2004 @ 11:45:
[...]

Dat betekent dat die CAST niet geldig is neergezet, waarschijnlijk moet je bij jou DBMS de CAST op een andere manier gebruiken?
CAST en CONVERT varieren inderdaad per DBMS van syntax. 'CAST x AS type' is geloof ik specifiek voor SQL Server, maar ik ken inderdaad MUSQLE ook niet dus geen idee hoe het daarin moet.

[ Voor 20% gewijzigd door curry684 op 29-07-2004 11:47 ]

Professionele website nodig?


  • marrik
  • Registratie: Augustus 2003
  • Laatst online: 20-07-2025

marrik

Live long and prosper

Heb je al geprobeerd de uitkomst een kolomnaam te geven? (zoals al eerder voorgesteld)

code:
1
CAST(FACTOPDRACHTREGEL.KOSTPRIJS AS FLOAT)/CAST(FACTOPDRACHTREGEL.FACTBEDRAGEXCL AS FLOAT) AS WINSTRATIO

Marrik


Verwijderd

Topicstarter
Ja dat is namelijk me 2e probleem. Hij geeft namelijk een error :
Afbeeldingslocatie: http://www.scootxtreme.nl/lib/hostees/kees/scr3.jpg


site van ons boekhoud programma:
http://www.unit4agresso.n...s/multivers/mv_musqle.asp

Ik heb ook nog even gegoogled, met verschillende keywords maar ik kon heel weinig vinden:
http://www.google.nl/sear...=nl&ie=UTF-8&q=MuSQLe&lr=

De meeste resultaten waren van de site waar wij ons boekhoud programma
Toch ga ik ze denk even bellen.

[ Voor 8% gewijzigd door Verwijderd op 29-07-2004 15:17 ]


  • marrik
  • Registratie: Augustus 2003
  • Laatst online: 20-07-2025

marrik

Live long and prosper

De SQL is goed, ik denk dat jouw probleem ergens anders zit. En omdat je met de rapport generator werkt zou ik eerst maar eens in de help daarvan kijken.

Marrik


Verwijderd

Topicstarter
Oke, het is nog steeds niet gelukt. Opzich maakt het nu niet zoveel meer uit omdat ik een andere manier met excel heb bevonden. Ik vindt het toch jammer dat het niet gelukt is maar heb er wel van geleerd :)

BTW:
MuSQLe is de database software van ons oude boekhoud programma.
SQLBase is de database software van ons nieuwe boekhoud programma.

vandaar dat jullie Musqle niet kenden? :P

Ik heb multivers, de ontwikkelaar van ons boekhoud programma gebeld, en die wist nog geen eens wat CAST en CONVERT was :? :/ is dit normaal?

Mocht je toch de oplossing weten, wil ik het nog best proberen. Ik zelf ga denk niet meer opzoek naar het probleem.

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Heb je CDbl(KOSTPRIJS) al geprobeerd?

| Toen / Nu

Pagina: 1