Toon posts:

[ACCESS SQL] If-statement

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

Verwijderd

Topicstarter
Ik heb een SQL Query gemaakt met de standaard opbouw
[sql]
SELECT
FROM
GROUPBY
[/sql]
Dit is een lange query geworden, want er moeten een aantal berekeningen gemaakt worden. Dit gaat perfect.
Maar nu komt het volgende.
TOTAALLOKAAL = AANTGESPREKKEN * KORTING
Die korting hangt af van het aantal gesprekken, minder dan 1000 gesprekken korting1, tussen 1000 en 1500 korting2 etc... die korting komt ook weer uit een tabel. Hoe moet ik dit in een query plaatsen en waar?

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

Annie

amateur megalomaan

kent access geen CASE of IIf ofso? Even zoeken in de help.

de constructie zal dan bijv. iets worden als:
code:
1
2
3
4
5
6
7
SELECT
  AANTGESPREKKEN
  * CASE WHEN AANTGESPREKKEN < 1000
    THEN 10 
    ELSE 20
  END as TOTAALLOKAAL
FROM ...

Today's subliminal thought is:


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 24-05 14:12

Crazy D

I think we should take a look.

Case weet ik niet zeker, Iif weet ik wel 100% zeker, dus daar zou je nog wel leuke dingen mee kunnen uithalen :)

Exact expert nodig?


Verwijderd

Topicstarter
Op woensdag 05 september 2001 12:40 schreef CrazyD_at_work het volgende:
Case weet ik niet zeker, Iif weet ik wel 100% zeker, dus daar zou je nog wel leuke dingen mee kunnen uithalen :)
En hoe werkt dat IFF-statement dan?

  • Splatter
  • Registratie: December 2000
  • Laatst online: 26-11-2021
Iif(Expression, Truepart, Falsepart)

vb.
Iif(a > 100, "groot", "klein")

Als 'a' groter dan 100 is, komt er "groot" te staan.
Anders wordt het "klein".

Verwijderd

Topicstarter
Volgens mij kent Acccess dat allemaal niet, want de IFF en CASE geven alleen maar foutmeldingen.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 24-05 14:12

Crazy D

I think we should take a look.

Dit is een variant op een werkende query uit Access:

SELECT veld1, Iif(veld2 > 100, "ja", "nee" ) AS veld2
FROM MijnTabelletje

Ik dacht alleen dat het niet werkt als je de query vanuit code aanmaakt (dus niet Recordset.Open "SELECT Iif()...) maar wel als je er een Quuery binnen Access van maakt (en die kun je weer gewoon aanroepen vanuit code alsof het een tabel is).

Exact expert nodig?


Verwijderd

Topicstarter
Op woensdag 05 september 2001 15:13 schreef CrazyD_at_work het volgende:
Dit is een variant op een werkende query uit Access:

SELECT veld1, Iif(veld2 > 100, "ja", "nee" ) AS veld2
FROM MijnTabelletje

Ik dacht alleen dat het niet werkt als je de query vanuit code aanmaakt (dus niet Recordset.Open "SELECT Iif()...) maar wel als je er een Quuery binnen Access van maakt (en die kun je weer gewoon aanroepen vanuit code alsof het een tabel is).
Als ik dat doe krijg ik alleen de melding :
De instructie SELECT bevat een gereserveerd woord of een andere argumentnaam die verkeerd gespeld, ontbreekt of een verkeerd leesteken heeft!

Verwijderd

Topicstarter
Op woensdag 05 september 2001 16:05 schreef MeneerPeer het volgende:

[..]

Als ik dat doe krijg ik alleen de melding :
De instructie SELECT bevat een gereserveerd woord of een andere argumentnaam die verkeerd gespeld, ontbreekt of een verkeerd leesteken heeft!
Probleem opgelost, maar ik denk niet dat ik met die IFF de boel opgelost krijg, of mag ik in een IFF een IFF plaatsen?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 25-05 22:48

Creepy

Tactical Espionage Splatterer

IF statements in SQL.. dat zal Microsoft weer es niet bedacht hebben :)

SQL = vraagtaal, geen programeertaal.. als een hoop mensen dat nu eerst eens duidelijk hadden...

Ok.. dus in access schijnt het wel te kunnen, in standaard SQL dus helemaal niet.. dus mocht je je DB nog es om gaan zetten naar iets anders (Mysql,. whatever) dan werkt het dus helemaal niet meer..

of je moet stored procedures gaan gebruiken, daarin is een if wel mogelijk.. maar of access dat kan??....

Misschien een idee om meerdere queries te stellen met daarin de korting, zodat voor die ene query je de korting precies weet (1 query met where aantalgesprekken < 1000, tweede query met aantalgesprekken > 1000), dan kan je de korting gewoon in de query opnemen... Als die queries los van elkaar werken kan je ze samenvoegen met UNION
code:
1
2
3
Select iets*korting1 FROM tabel1 where iets < 1000
UNION
Select iets*korting2 FROM tabel2 where iets >= 1000

"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


Verwijderd

IF statements zijn wel degelijk bekend in SQL
(in dit geval in gebruik met MSSQL7.0)
code:
1
IF (SELECT count(*) FROM tabelletje) > 2  PRINT 'Blaat' ELSE PRINT 'Ohh'

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 25-05 22:48

Creepy

Tactical Espionage Splatterer

IF statements in SQL.. dat zal Microsoft weer es niet bedacht hebben
En jij zegt dat ze in MSSQL bestaan.. das niet van Microsoft zeker? :)

Toch es proberen.. IF en PRINT statement in ACCESS, of moet dit dus echt dat MSSQL server zijn? In SQL 3 (de officiele standaard dus) kan je IF statements alleen gebruiken in stored procedures... in normale queries niet..

"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


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

Annie

amateur megalomaan

Op woensdag 05 september 2001 23:20 schreef Creepy het volgende:

[..]

En jij zegt dat ze in MSSQL bestaan.. das niet van Microsoft zeker? :)

Toch es proberen.. IF en PRINT statement in ACCESS, of moet dit dus echt dat MSSQL server zijn? In SQL 3 (de officiele standaard dus) kan je IF statements alleen gebruiken in stored procedures... in normale queries niet..
Zo'n beetje elke database bakker heeft zijn eigen uitbreidingen op de SQL standaard (niet alleen MS). En imho is dat maar goed ook.
De ansi-sql moet natuurlijk niet uit het oog verloren worden, maar verbeteringen/optimalisaties zal ik niet afslaan.

Today's subliminal thought is:


  • troyk
  • Registratie: Juni 2003
  • Laatst online: 02-12-2025

troyk

attrib -r troyk.nfo

Beste Tweakers,

Ik heb eigenlijk een soort zelfde vraag, vandaar dat ik hem hier stel ipv een nieuw topic te openen.

Ik wil graag het volgende:
Iif(epabwd.bewsoort = 'i', exp=epapor.aant_ord , exp= (epapor.aant_ord * epabew.mach_tijd) ) As exp

Het lijkt me dat de exp niet werkt in het statement omdat ik het veld pas aan het eind van het statement een naam geef (AS exp)
Ik kan geen variable in de statement gebruiken en later pas benamen?

Heeft iemand hier een oplossing voor?

It's not who you are , it's who you know.


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
troyk schreef op 11 mei 2004 @ 14:01:
Beste Tweakers,

Ik heb eigenlijk een soort zelfde vraag, vandaar dat ik hem hier stel ipv een nieuw topic te openen.

Ik wil graag het volgende:
Iif(epabwd.bewsoort = 'i', exp=epapor.aant_ord , exp= (epapor.aant_ord * epabew.mach_tijd) ) As exp

Het lijkt me dat de exp niet werkt in het statement omdat ik het veld pas aan het eind van het statement een naam geef (AS exp)
Ik kan geen variable in de statement gebruiken en later pas benamen?

Heeft iemand hier een oplossing voor?
exp= weglaten, dit wordt impliciet door de query geregeld

  • troyk
  • Registratie: Juni 2003
  • Laatst online: 02-12-2025

troyk

attrib -r troyk.nfo

Hmm ok :)
thnx _/-\o_

Maar nu prompt hij exp.


- edit - ook stom.

werkt nu.

[ Voor 28% gewijzigd door troyk op 11-05-2004 14:12 ]

It's not who you are , it's who you know.

Pagina: 1