[SQL] Lonen procentueel verhogen *

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

  • Sayko
  • Registratie: Juni 2001
  • Laatst online: 16-05 18:56

Sayko

Knowledge Is Power

Topicstarter
hallo tweakers ik ben ten einde raad of ik zoek niet goed.

ik heb nu een acces database gemaakt met medewerkers, afdeling waar ze werken, hun uurloon enz
nu moet ik een query maken waarvan ik alle afdelingen behalve 1(in dit geval onderhoud) 3% loonsverhoging moet geven. en onderhoud 4%.

ik weet nu dus absoluut niet hoe ik dit in sql voor elkaar kan krijgen.

kan iemand zo vriendelijk voor mij zijn om mij hieruit te helpen. het is voor school

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
update tabel set veld1=veld1*1,04 where afdeling=onderhoud

zoiets al geprobeerd ?

[ Voor 41% gewijzigd door pkouwer op 18-01-2004 18:01 ]


  • Sayko
  • Registratie: Juni 2001
  • Laatst online: 16-05 18:56

Sayko

Knowledge Is Power

Topicstarter
ik krijg telkens syntaxisfouten. ook met wat jij post

  • Corona Extra
  • Registratie: September 2003
  • Laatst online: 27-05 16:04
post eens wat jij hebt dan, dan kunnen wij mischien de fout er uit halen.

  • Sayko
  • Registratie: Juni 2001
  • Laatst online: 16-05 18:56

Sayko

Knowledge Is Power

Topicstarter
IIF([afdeling]=onderhoud;[afdeling]*1,04;[afdeling]*1,03)

  • Corona Extra
  • Registratie: September 2003
  • Laatst online: 27-05 16:04
Ik zou als ik jou was hier even kijken: http://www.w3schools.com/sql/sql_update.asp . Zoals pkouwer al aangaf moet je een update query uitvoeren, wat je nu hebt lijkt me een stukje access/vba script. Ik zou het zelf met 2 queries doen:

1) UPDATE tabelnaam SET veldnaam = veldnaam * 1,03 WHERE afdeling <> 'onderhoud'
2) UPDATE tabelnaam SET veldnaam = veldnaam * 1,04 WHERE afdeling = 'onderhoud'

  • Sayko
  • Registratie: Juni 2001
  • Laatst online: 16-05 18:56

Sayko

Knowledge Is Power

Topicstarter
ja ik heb het al gevonden. was toch niet zo moeilijk.
SELECT Afdeling.afdelingscode, Afdeling.afdeling, Werknemer.uurloon, IIf([afdeling]="onderhoud",[uurloon]*1.04,[uurloon]*1.03) AS [Nieuw Uurloon]
FROM Afdeling INNER JOIN Werknemer ON Afdeling.afdelingscode = Werknemer.afdelingscode;

dit werkt ook gewoon

[ Voor 7% gewijzigd door Sayko op 18-01-2004 18:24 ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Hoodlum2000 schreef op 18 januari 2004 @ 18:06:
ik krijg telkens syntaxisfouten. ook met wat jij post
Behalve dat ie een stel '' mist is er niks mis met zijn voorbeeld, wat voor syntaxisfouten krijg je?

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 31-03 15:20
Let op het verschil in decimaalteken. Gebruik dus een punt in plaats van een komma.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • Sayko
  • Registratie: Juni 2001
  • Laatst online: 16-05 18:56

Sayko

Knowledge Is Power

Topicstarter
Ik bedank jullie allemaal en voor de snelle reacties en voor jullie behulpzaamheid.

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
Hoodlum2000 schreef op 18 januari 2004 @ 18:23:
ja ik heb het al gevonden. was toch niet zo moeilijk.
SELECT Afdeling.afdelingscode, Afdeling.afdeling, Werknemer.uurloon, IIf([afdeling]="onderhoud",[uurloon]*1.04,[uurloon]*1.03) AS [Nieuw Uurloon]
FROM Afdeling INNER JOIN Werknemer ON Afdeling.afdelingscode = Werknemer.afdelingscode;

dit werkt ook gewoon
en nu je eindoplossing, dit is een SELECT-query, geen update. Misschien heeft iemand anders er ook nog wat aan.

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Hoodlum2000 schreef op 18 januari 2004 @ 18:23:
ja ik heb het al gevonden. was toch niet zo moeilijk.
SELECT Afdeling.afdelingscode, Afdeling.afdeling, Werknemer.uurloon, IIf([afdeling]="onderhoud",[uurloon]*1.04,[uurloon]*1.03) AS [Nieuw Uurloon]
FROM Afdeling INNER JOIN Werknemer ON Afdeling.afdelingscode = Werknemer.afdelingscode;

dit werkt ook gewoon
dit is dus geen update, maar een select, hiermee worden de lonen weergegeven op de manier die jij wil, maar ze staan nu nog niet zo in de db zoals jij wil open de tabel waarin de lonen staan maar eens, je zult zien dat daar niets verandert is...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Sayko
  • Registratie: Juni 2001
  • Laatst online: 16-05 18:56

Sayko

Knowledge Is Power

Topicstarter
ik heb het nu dus ook anders gedaan. met deze code krijg ik een nieuw record bij namelijk Nieuw Uurloon. als ik query uitvoer krijg ik dus de juiste loon met de oude loon ernaast. dat vond ik er beter uitzien eerlijk gezegd.

[ Voor 8% gewijzigd door Sayko op 19-01-2004 11:51 ]


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

curry684

left part of the evil twins

Hoodlum2000 schreef op 19 januari 2004 @ 11:17:
ik heb het nu dus ook anders gedaan. met deze code krijg ik een nieuw record bij namelijk Nieuw Uurloon. als ik query uitvoer krijg ik dus de juiste loon met de oude loon ernaast. dat vond ik er beter uitzien eerlijk gezegd.
Maar doe je ondertussen al een update ipv een select, en post je ondertussen je oplossing al eens?

Professionele website nodig?


  • Sayko
  • Registratie: Juni 2001
  • Laatst online: 16-05 18:56

Sayko

Knowledge Is Power

Topicstarter
de update functie kwam ik niet uit, dus heb ik het gewoon zo gedaan

SELECT Afdeling.afdelingscode, Afdeling.afdeling, Werknemer.uurloon, IIf([afdeling]="onderhoud",[uurloon]*1.04,[uurloon]*1.03) AS [Nieuw Uurloon]
FROM Afdeling INNER JOIN Werknemer ON Afdeling.afdelingscode = Werknemer.afdelingscode;

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
En hoe verhoog je je uren dan?
Ik bedoel, hoe voer je de aanpassingen door in de DB?

Waarom kwam je er niet uit, uit die UPDATE ? Heb je de juiste syntax opgezocht?

https://fgheysels.github.io/


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

curry684

left part of the evil twins

Hoodlum2000 schreef op 19 januari 2004 @ 17:24:
de update functie kwam ik niet uit, dus heb ik het gewoon zo gedaan:
SELECT ....

Handig, krijgt iedereen ieder jaar tenminste letterlijk dezelfde loonsverhoging :z

En zonder grapjes: heb je uberhaupt wel een idee wat select en update doen of ben je maar gewoon wat in de ruimte aan het aanmodderen?

Professionele website nodig?


Verwijderd

Ik hoop toch dat dit een huiswerk opdracht is, als je met dit soort zaken zo loopt te kloten, zit je toch niet op de goede plek (vind ik).

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

curry684

left part of the evil twins

Verwijderd schreef op 19 januari 2004 @ 17:44:
Ik hoop toch dat dit een huiswerk opdracht is, als je met dit soort zaken zo loopt te kloten, zit je toch niet op de goede plek (vind ik).
Volgens de openingspost is het idd voor school, anders zou ie binnenkort wel door een kudde woeste werknemers gelynched worden :D

Professionele website nodig?


  • Sayko
  • Registratie: Juni 2001
  • Laatst online: 16-05 18:56

Sayko

Knowledge Is Power

Topicstarter
met update kom ik echt niet verder als dit

UPDATE Werknemer, SET uurloon = [*1,04]
WHERE uurloon=uurloon;

maar nu doet ie dus alles 4% hoger terwijl alleen afdeling onderhoud dit moet hebben en de rest van de afdeling 3%
dit is voor het eerst dat ik met UPDATE werk.
excuses dat ik niet heb vermeld dat ik een noob ben wat betreft programmeren in sql

[ Voor 24% gewijzigd door Sayko op 19-01-2004 17:58 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

UPDATE Werknemer, Afdeling SET uurloon = [*1,04] WHERE uurloon=uurloon;
Zeg eens hardop wat dit betekent.

Verder betwijfel ik of een loon werknemer gebonden is, of functiegebonden is.

[ Voor 26% gewijzigd door gorgi_19 op 19-01-2004 17:58 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Sayko
  • Registratie: Juni 2001
  • Laatst online: 16-05 18:56

Sayko

Knowledge Is Power

Topicstarter
weet je wat, laat maar lekker zo dan heb ik een opdracht misschien niet goed uitgevoerd. ik lever het gewoon zo in koop morgen een sql boek en ga het gewoon leren.

BTW; ik geef niet op. leren gaat veel beter
en excuses ook nog eens als ik overkom als een dombo, maar ik kan niet meer zo helder nadenken mijn vader is deze week 4 keer onder hetmes geweest. en hij is net nog geopereerd.

[ Voor 43% gewijzigd door Sayko op 19-01-2004 18:05 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Je kunt natuurlijk ook iedereen 3% geven en vervolgens onderhoud nog eens 1,04/1,03 :)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Hoodlum2000 schreef op 19 januari 2004 @ 17:59:
weet je wat, laat maar lekker zo dan heb ik een opdracht misschien niet goed uitgevoerd. ik lever het gewoon zo in koop morgen een sql boek en ga het gewoon leren.

BTW; ik geef niet op. leren gaat veel beter
en excuses ook nog eens als ik overkom als een dombo, maar ik kan niet meer zo helder nadenken mijn vader is deze week 4 keer onder hetmes geweest. en hij is net nog geopereerd.
hehe, niet opgeven he ! Nu een opdracht laten vallen, betekent dat je er te makkelijk over denkt om dat te doen - neem van mij aan, dat wil je niet- , vraag anders of je een dag extra mag doen ivm met je vader ?

Zoals gorgi_19 al zei, lees nu eens hardop wat je hebt ingetyped, dan klinkt het al niet logisch, hint 1: uurloon is altijd gelijk aan uurloon :)

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
hoe makkelijk moeten we het maken. Heb je hier al eens gezocht én gelezen ??

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 17-11-2025

robjanssen

Software Developer

code:
1
2
3
4
5
6
7
UPDATE Werknemer
SET uurloon = uurloon * 1.04
WHERE afdelingscode = [onderhoud-afdelingcode]

UPDATE Werknemer
SET uurloon = uurloon * 1.03
WHERE afdelingscode <> [onderhoud-afdelingcode]

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

En hoe is hij daarmee geholpen, robjanssen?

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


  • Sayko
  • Registratie: Juni 2001
  • Laatst online: 16-05 18:56

Sayko

Knowledge Is Power

Topicstarter
ok ik heb het. waarschijnlijk moet ik dan twee aparte qouerys maken?

UPDATE Afdeling INNER JOIN Werknemer ON Afdeling.afdelingscode = Werknemer.afdelingscode SET Werknemer.uurloon = [uurloon]*1.04
WHERE (((Afdeling.afdelingscode)="on"));

nu de rest nog even

als ik dit doe zegt die dat die 0 rijen gaat bijwerken terwijl er natuurlijk wel rijen zijn die bijgewerkt moeten worden.

UPDATE Afdeling INNER JOIN Werknemer ON Afdeling.afdelingscode = Werknemer.afdelingscode SET Werknemer.uurloon = [uurloon]*1.03
WHERE (((Afdeling.afdelingscode)="mr" And (Afdeling.afdelingscode)="el" And (Afdeling.afdelingscode)="it" And (Afdeling.afdelingscode)="verk" And (Afdeling.afdelingscode)="ink" And (Afdeling.afdelingscode)="adm"));

[ Voor 57% gewijzigd door Sayko op 19-01-2004 21:41 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je moet er inderdaad 2 queries van maken. Maar bij een update kan je zover ik weet geen Join doen ( weet ik niet zeker trouwens maar het lijkt mij nogal vreemd ).

Je moet het eigenlijk gewoon zien zoals je ook aan iemand zou vertellen wat je moet doen dus ongeveer zo.

pas alle werknemers aan
verhoog hun uurloon met 3 %
als hun afdeling niet onderhoud is.

en dan hetzelfde alleen dan voor de afdeling onderhoud.

Mischien dat het ook nog met een query kan als je in het Set gedeelte gebruik maakt van een of andere IF constructie maar dat heb ik zelf nog nooit gebruikt en ik zou dus ook niet weten of dat mogelijk is.

Het voorbeeld wat ik noem is trouwens vrij eenvoudig om te zetten naar SQL. ook al staat er hierbove al een kant en klare oplossing kan je het beter even zelf uit proberen te vinden, daar leer je veel meer van en dan kan je de volgende keer het probleem zelf oplossen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Hoodlum2000 schreef op 19 januari 2004 @ 21:12:
ok ik heb het. waarschijnlijk moet ik dan twee aparte qouerys maken?
Heel goed, dat maakt het in ieder geval overzichtelijker.
UPDATE Afdeling INNER JOIN Werknemer ON Afdeling.afdelingscode = Werknemer.afdelingscode SET Werknemer.uurloon = [uurloon]*1.04
WHERE (((Afdeling.afdelingscode)="on"));
Je bent goed op weg. De JOIN is alleen overbodig aangezien je dit op afdelingscode doet.
Je kan dus ook gewoon doen:
code:
1
UPDATE werknemer SET uurloon=uurloon*1.04 WHERE afdelingscode="on"
nu de rest nog even

als ik dit doe zegt die dat die 0 rijen gaat bijwerken terwijl er natuurlijk wel rijen zijn die bijgewerkt moeten worden.

UPDATE Afdeling INNER JOIN Werknemer ON Afdeling.afdelingscode = Werknemer.afdelingscode SET Werknemer.uurloon = [uurloon]*1.03
WHERE (((Afdeling.afdelingscode)="mr" And (Afdeling.afdelingscode)="el" And (Afdeling.afdelingscode)="it" And (Afdeling.afdelingscode)="verk" And (Afdeling.afdelingscode)="ink" And (Afdeling.afdelingscode)="adm"));
En hoe zou dit nou komen? Je voorwaarden liggen hier ietwat vreemd want je selectie ligt nu op alle werknemers die als afdelingscode "el" en "it" en "verk" en "ink" en "adm" hebben. Dit kun je beter vervangen door OR (of).

Nog beter is om gewoon de eerste update om te draaien aangezien alle afdelingen welke niet gelijk zijn aan "on" geupdate moeten worden. Maar die query mag je zelf bouwen. Hintje daarbij is dat er slechts heel weinig aan mijn query gewijzigd hoeft te worden.

[ Voor 6% gewijzigd door Verwijderd op 20-01-2004 09:45 ]


  • Sayko
  • Registratie: Juni 2001
  • Laatst online: 16-05 18:56

Sayko

Knowledge Is Power

Topicstarter
kijk dat was dus mijn probleem, ik heb in het begin ook op de verkeerde plekken aanhalingstekens gebruikt.

maar ik heb er met mjn leraar nog even naar gekeken en die zei dat hetgeen wat ik had gemaakt wel door de beugel kon. ook een beetje omdat mijn vader ernstig ziek is denk ik.
ik heb het al ingeleverd.

dankzij jullie heb ik toch aardig wat bijgeleerd over UPDATE. vooral de laatste post.

tnx

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
UPDATE Werknemer
SET uurloon = uurloon * 1.03
WHERE afdelingscode IN
 ( SELECT afdelingscode
    FROM Afdeling
   WHERE AfdelingsCode IN ('mr','el','it','verk','ink','adm')
 )


UPDATE Werknemer
SET uurloon = uurloon * 1.04
WHERE afdelingscode IN
 ( SELECT afdelingscode
    FROM Afdeling
   WHERE AfdelingsCode IN ('on')
 )

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
Heel erg fijn dat je de oplossing hebt gevonden middels GOT, maar is het niet verstandig, ik val je niet aan, om een boek basiskennis SQL door te nemen. IMO is de gestelde vraag erg basic en ik zie de volgende (ook basic) vraag alweer verschijnen.
Wat mij betreft vind ik het wel goed dat er basic vragen gesteld worden, alleen zijn er mod's die er anders over denken danwel hun beleid er op af hebben gestemd, ook prima.

Ik weet dat er bij ComputerTotaal ook een dergelijk forum is, echter licht daar, niets tegen computertotaal, het niveau een stuk(je) lager.

  • Sayko
  • Registratie: Juni 2001
  • Laatst online: 16-05 18:56

Sayko

Knowledge Is Power

Topicstarter
een paar posts terug heb ik al aangegeven een boek SQl te kopen om het te leren. en ja dit is zeer verstandig. voor jou die sql wel kent is dit basic. voor mij is dit niet basic want ik kende het niet.
gelukkig ben ik niet iemand die om elk klein iets een topic opent (zoek maar na) maar hier kwam ik ecnt niet uit.

nu wel

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op 20 januari 2004 @ 18:55:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
UPDATE Werknemer
SET uurloon = uurloon * 1.03
WHERE afdelingscode IN
 ( SELECT afdelingscode
    FROM Afdeling
   WHERE AfdelingsCode IN ('mr','el','it','verk','ink','adm')
 )


UPDATE Werknemer
SET uurloon = uurloon * 1.04
WHERE afdelingscode IN
 ( SELECT afdelingscode
    FROM Afdeling
   WHERE AfdelingsCode IN ('on')
 )
Wat is dit voor een omslachtige query? Waarom zou je in hemelsnaam gebruik maken van een subselect? Je hebt in je Werknemer tabel hier namelijk al een afdelingscode.

Dat dat waarschijnlijk niet echt een goed ontwerp van je database is is een ander verhaal maar daar gaat het hier niet om.

[ Voor 7% gewijzigd door Woy op 20-01-2004 20:27 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

rwb schreef op 20 januari 2004 @ 20:27:
[...]
Wat is dit voor een omslachtige query? Waarom zou je in hemelsnaam gebruik maken van een subselect? Je hebt in je Werknemer tabel hier namelijk al een afdelingscode.
Foutje. Query is aangepast.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
UPDATE Werknemer
SET uurloon = uurloon * 1.03
WHERE afdelingscode IN
 ( SELECT afdelingscode
    FROM Afdeling
   WHERE Afdeling IN ('mr','el','it','verk','ink','adm')
 )


UPDATE Werknemer
SET uurloon = uurloon * 1.04
WHERE afdelingscode IN
 ( SELECT afdelingscode
    FROM Afdeling
   WHERE Afdeling IN ('on')
 )

of met een EXISTS zou het ook opgelost kunnen worden (*for the record*).

[ Voor 7% gewijzigd door Verwijderd op 20-01-2004 21:47 ]


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 17-11-2025

robjanssen

Software Developer

Zo is het nog eenvoudiger:

code:
1
2
3
4
5
6
7
UPDATE Werknemer
SET uurloon = uurloon * 1.03
WHERE afdelingscode IN ('mr','el','it','verk','ink','adm')

UPDATE Werknemer
SET uurloon = uurloon * 1.04
WHERE afdelingscode IN ('on')

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
robjanssen schreef op 20 januari 2004 @ 22:29:
Zo is het nog eenvoudiger:

code:
1
2
3
4
5
6
7
UPDATE Werknemer
SET uurloon = uurloon * 1.03
WHERE afdelingscode IN ('mr','el','it','verk','ink','adm')

UPDATE Werknemer
SET uurloon = uurloon * 1.04
WHERE afdelingscode IN ('on')
waarom gebruik je hier in godsnaam een in??? Ik hoop dat de meeste query optimizers het nog wel optimaliseren maar je kan toch echt gewoon beter de = en NOT operators gebruiken dus

code:
1
2
3
4
5
6
7
UPDATE Werknemer
SET uurloon = uurloon * 1,03
WHERE not afdelingscode = 'on'

UPDATE Werknemer
Set uurloon = uurloon * 1.04
WHERE afdelingscode = 'on'


zeker met die laatste query van jou is het onzinig om de IN operator te gebruiken omdat je maar controleert op een waarde.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1