Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

Oracle nav veldwaarde kolommen grouperen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb even een vraagje.

Ik wil als het geslacht onzijdig ('O'), dat het veld naam wordt weergegeven.
EN
Als het geslacht zijdig is ('M' of 'V') dat er een compilatie van velden wordt weergegeven, waarbij geldt:
Als er een voorvoegsel in zit, geef die dan in de compilatie weer, anders niet.


Nu is het laatste mij bijna gelukt, ware het niet, dat als een naam geen voorvoegsel heeft, hij een spatie weergeeft, wat niet de bedoeling is.
Zelf heb ik er dit van kunnen maken:

select geslacht,
/* NAAM */
VOORL||' '||VOORV||' '||NAAM "Opgemaakte_Naam",
geslacht,
ddgeboorte,
sofinr,
from persoon

het zou dus zoiets moeten worden:
select geslacht,
if geslacht is 'o' then NAAM as "Opgemaakte_Naam",
else (VOORL||' '||VOORV||' '||NAAM "Opgemaakte_Naam",
geslacht,
ddgeboorte,
sofinr)
from persoon


nu heb ik gelezen dat ik de decode functie kan gebruiken in zulk soort situaties, maar ik kom er daarbij niet uit. Ik weet (denk) niet of dit ook voor deze situatie geldt omdat dit geen standaard vergelijking is.
(http://www.1keydata.com/sql/sql-concatenate.html)
iemand suggesties

[ Voor 0% gewijzigd door Verwijderd op 13-10-2008 14:53 . Reden: as toegevoegd :) ]


Verwijderd

Google eens naar oracle case. Dat kan helpen met het if-statement.

Verwijderd

Topicstarter
Werkt niet icm met wat ik wil :P. Ik werk nu wel met de case functie, maar ik zit alsnog met het probleem de samenvoeging die ik niet kan maken. Bij de Else mag ik maar 1`veldnaam opgeven, en niet
else VOORL||' '||VOORV||' '||NAAM "Opgemaakte_Naam1",

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik heb net je OP drie keer doorgelezen en ik denk nu dat ik het snap. Om te beginnen is je titel nogal onduidelijk, omdat je namelijk helemaal niks groepeert, maar je bedoelt waarschijnlijk samenvoegen.

Misschien heb je hier iets aan:
http://www.tek-tips.com/v...ad.cfm?qid=1408619&page=9

En als we dan toch bezig zijn, post gelijk even je hele query, dat leest iets makkelijker. En stop hem in [code] tags.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Verwijderd schreef op maandag 13 oktober 2008 @ 16:16:
Werkt niet icm met wat ik wil :P. Ik werk nu wel met de case functie, maar ik zit alsnog met het probleem de samenvoeging die ik niet kan maken. Bij de Else mag ik maar 1`veldnaam opgeven, en niet
else VOORL||' '||VOORV||' '||NAAM "Opgemaakte_Naam1",
waarom zou dat niet werken?
select decode(geslacht,'o',naam,voorl||' '||voorv||' '||naam) as opgemaakte_naam
from ...

Hetzelfde moet met case ook werken.

Who is John Galt?


  • winkbrace
  • Registratie: Augustus 2008
  • Laatst online: 24-08 15:17
Ik zou nog eens goed naar je CASE syntax kijken, want het is wel degelijk mogelijk meerdere kolommen in je ELSE te zetten.

als ik het goed begrijp moet je select statement er ongeveer zo uitzien:

code:
1
2
3
4
5
6
7
SELECT CASE WHEN geslacht = 'O' THEN naam
            ELSE VOORL||' '||VOORV||' '||NAAM
       END opgemaakte_naam
,      geslacht
,      ddgeboorte
-- enz
FROM   persoon


Hmm... dit is zo eenvoudig dat je waarschijnlijk gewoon de alias voor de END hebt gezet ofzo.

Verwijderd

Topicstarter
update:

case
when subjektsoort = 'R' then NAAM
when voorv is not NULL then VOORL||' '||VOORV||' '||NAAM
when voorv is NULL then VOORL||' '||NAAM
else NULL
end as naam_opgemaakt

dat is 'm!
Heb maar even gepost voor als anderen tegen hetzelfde aanlopen!

Verwijderd

decode is inderdaad wat je nodig hebt.

Voorbeeld: (nog niet volledig voor jouw situatie)
SQL:
1
2
3
4
5
select 
  persoon.naam
, decode(persoon.geslacht, 'o', persoon.naam, persoon.geslacht) geslacht
from
  tbl_personen persoon

In dit geval wordt van persoon.geslacht de waarde gecontroleerd.
Als de waarde gelijk is aan '0' wordt de uitvoer van de functie persoon.naam.
Voor alle andere gevallen wordt de uitvoer van de functie persoon.geslacht.

Je kan echter ook op meerdere waardes controleren zoals hieronder.
SQL:
1
2
3
4
5
6
7
8
select 
  persoon.naam
, decode(persoon.geslacht, 
      'o', persoon.naam,
      '#', 'andere waarde',
      persoon.geslacht) geslacht
from
  tbl_personen persoon

Als de waarde 'o' wordt de naam getoond.
Als de waarde '#' wordt 'andere waarde' getoond
in alle andere gevallen wordt persoon.geslacht getoond.
Pagina: 1