[sql2000] formula koppelen aan query?

Pagina: 1
Acties:

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:15

Erhnam

het Hardware-Hondje :]

Topicstarter
Ik ben bezig proberen een formula te koppelen aan een query maar het wil niet echt lukken. Voordat ik verder uitleg wil ik graag eerst het uitleggen aan de hand van een screenshot:

Afbeeldingslocatie: http://www.euronet.nl/users/erhnam/sql2000.png

Je ziet hier de waarde FOB_sell en deze moet worden omgerekend naar FrancoEuro (x 1.5). Dit gaat prima. Die 1.5 is een waarde afhankelijk van een aantal factoren.

Het volgende is wat ik nu wil. Die '1.5' moet variable zijn; en dan het liefste gekopeld aan en query.

Ik heb dingen geprobeerd zoals:

SELECT FOB_sell * Geldwaarde FROM Frontpage

Met haakjes en quotes etc. maar ik kom er niet uit.

Misschien zijn hier mensen die er meer ervaring mee hebben. Op msdn is er niets over te vinden.

http://www.xbmcfreak.nl/


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

Annie

amateur megalomaan

Kijk eens naar User Defined Functions (UDF).

Today's subliminal thought is:


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:15

Erhnam

het Hardware-Hondje :]

Topicstarter
Annie schreef op 26 March 2003 @ 12:05:
Kijk eens naar User Defined Functions (UDF).
Ik heb er even naar gekeken maar het is een pittig stukje. Is UDF de enige manier om zoiets voor elkaar te krijgen?

http://www.xbmcfreak.nl/


Verwijderd

Wil je die waarde zeker in een tabel opslaan?

In een query kun je dit doen:
code:
1
SELECT waarde1, waarde1 * 1.5 as waarde2 FROM tabel

  • EfBe
  • Registratie: Januari 2000
  • Niet online
JE wilt een computed column maken op basis van een variabele. Dat kan niet. (immers, hoe lever je de waarde voor die variabele voor de tabel?)

Wat je wellicht wilt is een aanroep van een user defined functie die de gegeven FOB_Sell omrekent aan de hand van de gegeven omreken waarde. Je kunt dat ook direct in je query doen:

code:
1
2
3
SELECT  *,
    ([FOB_sell] * @OmrekenWaarde) AS FrancoEuro
FROM groep_decoratief


Het is echter aan te bevelen hier een user defined functie van te maken als je hem vaker nodig hebt, bv in andere queries.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

EfBe schreef op 26 March 2003 @ 14:54:
JE wilt een computed column maken op basis van een variabele. Dat kan niet. (immers, hoe lever je de waarde voor die variabele voor de tabel?)
Welke variabele? FOB_sell is gewoon een column van dezelfde tabel.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • EfBe
  • Registratie: Januari 2000
  • Niet online
kenneth schreef op 26 March 2003 @ 15:02:
[...]
Welke variabele? FOB_sell is gewoon een column van dezelfde tabel.
Jahaa, maar die 1.5 wil hij variabel maken. Ff lezen, die posting, m8 :P

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:15

Erhnam

het Hardware-Hondje :]

Topicstarter
EfBe schreef op 26 March 2003 @ 14:54:
JE wilt een computed column maken op basis van een variabele. Dat kan niet. (immers, hoe lever je de waarde voor die variabele voor de tabel?)

Wat je wellicht wilt is een aanroep van een user defined functie die de gegeven FOB_Sell omrekent aan de hand van de gegeven omreken waarde. Je kunt dat ook direct in je query doen:

code:
1
2
3
SELECT  *,
    ([FOB_sell] * @OmrekenWaarde) AS FrancoEuro
FROM groep_decoratief


Het is echter aan te bevelen hier een user defined functie van te maken als je hem vaker nodig hebt, bv in andere queries.
Okee bedankt voor je reactie. Ik heb net al even zitten oefenen.. Enige is dat ik de waarde FrancoEuro dan uit de database moet gooien kwam ik net achter, maar dat is op zich niet zo'n probleem.

Ik denk dat ik die @OmrekenWaarde wel vaker nodig zal hebben. hoe dat user defined functie werkt moet ik nog even uit vogelen.. Hoe zit het als je zo'n user defined functie maakt? past die dat toe op alle tabellen ?

http://www.xbmcfreak.nl/


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

Annie

amateur megalomaan

Ik snap niet helemaal wat je bedoelt met "past die dat toe op alle tabellen ?". Een UDF is gewoon een functie die je wat input kan geven en die een resultaat teruggeeft. Stel je maakt een UDF die als input een Numeric krijgt en een Numeric teruggeeft.

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE FUNCTION dbo.fnFOB_sellToFrancoEuro
  (@invoer NUMERIC)
RETURNS NUMERIC
AS
BEGIN
  DECLARE @omrekenfactor INT
  
  -- zomaar een willekeurig voorbeeldje om de omrekenfactor
  -- variabel te laten zijn
  IF EXISTS(SELECT bla FROM sometable WHERE foo='bar')
    SET @omrekenfactor = 2
  ELSE
    SET @omrekenfactor = 1

  RETURN (@invoer * @omrekenfactor)
END


Dan kan je dus in je formula veld invoeren: dbo.fnFOB_sellToFrancoEuro(FOB_sell)
Maar je kan de function dus ook gewoon gebruiken in je SELECT statement als je geen computed column in je table wil.

/disclaimer: function is ff uit de losse pols, dus er zullen ongetwijfeld fouten in zitten. Het gaat natuurlijk om het idee.

[ Voor 8% gewijzigd door Annie op 26-03-2003 17:07 ]

Today's subliminal thought is:


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:15

Erhnam

het Hardware-Hondje :]

Topicstarter
Ik ben zelf even wezen klooien en heb een best mooie oplossing gevonden :)

Query = "select * , (FOB_sell * (select Omrekenwaarde from frontpage)) AS FrancoEuro from groep_decoratief where show = 1 AND ean_no = '" & Request.QueryString("ean_no") & "' "

Met deze query is het mogelijk alle FrancoEuro prijzen om te rekenen.. Kep gewoon een query in een query gezet :) wist niet dat het zo makkelijk kon.

De gebruiker kan de Omrekenwaarde aanpassen met een mooie scriptje wat ik voor hem ga maken en alle prijzen worden direct omrekekend.. Welliswaar niet in de database maar ik laat ze nu gewoon tonen op asp niveau. :)

http://www.xbmcfreak.nl/


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

Annie

amateur megalomaan

Als je het dan toch op ASP niveau doet waarom dan niet gewoon:

ASP:
1
2
3
4
5
6
7
8
' bepaal factor
Factor = 2 
' of haal deze uit de database, een tekstbestand, querystring, whatever, ...

' stel query samen
Query = "select * , (FOB_sell * " & Factor & " AS FrancoEuro " _
      & "from groep_decoratief " _
      & "where show = 1 AND ean_no = '" & Request.QueryString("ean_no") & "'"

:?

offtopic:
rechtstreeks toevoegen van user input in een database query zonder controle is natuurlijk vragen om problemen.

[ Voor 28% gewijzigd door Annie op 27-03-2003 12:32 ]

Today's subliminal thought is:


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:15

Erhnam

het Hardware-Hondje :]

Topicstarter
Annie schreef op 27 March 2003 @ 12:30:
Als je het dan toch op ASP niveau doet waarom dan niet gewoon:

ASP:
1
2
3
4
5
6
7
8
' bepaal factor
Factor = 2 
' of haal deze uit de database, een tekstbestand, querystring, whatever, ...

' stel query samen
Query = "select * , (FOB_sell * " & Factor & " AS FrancoEuro " _
      & "from groep_decoratief " _
      & "where show = 1 AND ean_no = '" & Request.QueryString("ean_no") & "'"

:?

offtopic:
rechtstreeks toevoegen van user input in een database query zonder controle is natuurlijk vragen om problemen.
Omdat mensen de mogekijkheid moeten hebben om die factor waarde te kunnen veranderen. Bij jouw oplossingen moet er dus iedere keer in de code gedoken worden om het aan te passen.

verder vroeg ik mij of mensen een oplossing weten voor het volgende:

Tijdens het omrekenen worden waardes vermedigvuldigd en als antwoord komt er soms uit: 24.3456

Dit bedrag kan je natuurlijk niet afrekenen. Een net bedrag is 24.34
Weet iemand hoe je dit aan pakt dat die maar 2 cijfers achter de komma pakt?

http://www.xbmcfreak.nl/


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

Annie

amateur megalomaan

Erhnam schreef op 27 maart 2003 @ 13:37:
[...]


Omdat mensen de mogekijkheid moeten hebben om die factor waarde te kunnen veranderen. Bij jouw oplossingen moet er dus iedere keer in de code gedoken worden om het aan te passen.
In het voorbeeldje wel ja, maar je kan (zoals ook in de comment staat) de waarde ook op een andere manier bepalen.
Erhnam schreef op 27 maart 2003 @ 13:37:
Weet iemand hoe je dit aan pakt dat die maar 2 cijfers achter de komma pakt?
Kijk eens naar FormatNumber of FormatCurrency in een vbscript reference.

Today's subliminal thought is:

Pagina: 1