Qwery che non va

buongiorno, utilizzatore di Libre Office base da poco tempo sto cercando di realizzare un gestionale per la mia sala di scherma, tra le cose che il programma dovrebbe fare c’è il calcolo degli anni degli atleti e la loro collocazione automatica nella categoria corrispondente e nel circuito agonistico di loro appartenenza. ho redatto una qwery in sql ma non mi da risultato sperato che allego. sarei molto grato a chi mi potrebbe aiutare in questo lavoro. grazie
SELECT “COGNOME” , “NOME” , “GENERE” , “DATANASCITA” ,
CASE
WHEN “ANNI” = ’ ’ THEN
CAST((YEAR(CURRENT_DATE) - YEAR(“DATANASCITA”) ) AS VARCHAR) || ’ ’ AS “ANNI” ,
END
CASE
WHEN “ANNI” = 8 THEN ‘PRIME LAME’
WHEN “ANNI” = 9 THEN ‘PRIME LAME’
WHEN “ANNI” = 10 AND “GENERE” = ‘M’ THEN ‘MASCHIETTI’
WHEN “ANNI” = 10 AND “GENERE” = ‘F’ THEN ‘FEMMINUCCE’
WHEN “ANNI” = 11 AND “GENERE” = ‘M’ THEN ‘GIOVANISSIMI’
WHEN “ANNI” = 11 AND “GENERE” = ‘F’ THEN ‘GIOVANISSIME’
WHEN “ANNI” = 12 AND “GENERE” = ‘M’ THEN ‘RAGAZZI’
WHEN “ANNI” = 12 AND “GENERE” = ‘F’ THEN ‘RAGAZZE’
WHEN “ANNI” = 13 AND “GENERE” = ‘M’ THEN ‘ALLIEVI’
WHEN “ANNI” = 13 AND “GENERE” = ‘F’ THEN ‘ALLIEVE’
WHEN “ANNI” = 14 AND “GENERE” = ‘M’ THEN ‘CADETTI’
WHEN “ANNI” = 14 AND “GENERE” = ‘F’ THEN ‘CADETTE’
WHEN “ANNI” = 15 AND “GENERE” = ‘M’ THEN ‘CADETTI’
WHEN “ANNI” = 15 AND “GENERE” = ‘F’ THEN ‘CADETTE’
WHEN “ANNI” = 16 AND “GENERE” = ‘M’ THEN ‘CADETTI’
WHEN “ANNI” = 16 AND “GENERE” = ‘F’ THEN ‘CADETTE’
WHEN “ANNI” = 17 THEN ‘GIOVANI’
WHEN “ANNI” = 18 THEN ‘GIOVANI’
WHEN “ANNI” = 19 THEN ‘GIOVANI’
WHEN “ANNI” > 19 THEN ‘ASSOLUTI’
END AS “CAT” ,
CASE
WHEN “ANNI” <=9 THEN ‘PRE-AGONISTI’
WHEN “ANNI” <14 THEN ‘GPG’
WHEN “ANNI” >=14 THEN ‘ASSOLUTI’
END AS “CIRCUITO”
FROM INDICE

Ciao, ho fatto un database di esempio che allego, motore HSQLDB.
Ho dovuto fare la query “di appoggio” R_INDICE perchè un ALIAS non si può riadoperare all’interno della stessa query.
Il codice finale è appena abozzato, va finito seguendo la falsariga di quanto già impostato:
SELECT "COGNOME", "NOME", "GENERE", "DATANASCITA", "ANNI", CASE WHEN "ANNI" = 8 OR "ANNI" = 9 THEN 'PRIME LAME' ELSE ( CASE WHEN "ANNI" = 10 AND "GENERE" = 'M' THEN 'MASCHIETTI' ELSE '' END ) END AS "CAT" FROM "R_INDICE"

TEST.odb (5.3 KB)

Grazie Charlie per la gentile e rapida risposta mi metto subito a lavoro. Ti terrò informato.

Proseguendo un po’ e con tanta pazienza:
SELECT “COGNOME”, “NOME”, “GENERE”, “DATANASCITA”, “ANNI”,
CASE
WHEN “ANNI” = 8 OR “ANNI” = 9 THEN ‘PRIME LAME’
WHEN “ANNI” = 10 AND “GENERE” = ‘M’ THEN ‘MASCHIETTI’
WHEN “ANNI” = 10 AND “GENERE” = ‘F’ THEN ‘FEMMINUCCE’
WHEN “ANNI” = 11 AND “GENERE” = ‘M’ THEN ‘GIOVANISSIMII’
WHEN “ANNI” = 11 AND “GENERE” = ‘M’ THEN ‘FEMMINUCCE’


ELSE ‘’ END AS “CAT”,
CASE WHEN “ANNI” <= 9 THEN ‘PRE-AGONISTI’

ELSE ‘’ END AS “CIRCUITO”
FROM “R_INDICE”

Quindi, alla fine, a parte il problema già esposto del non riuso dell’ALIAS all’interno della stessa query dove è stato creato, mi pare ti manchino le parti con ELSE e END (CASE WHEN … ELSE … END).

Buongiorno Charlie, grazie ma un amico mi ha risolto il problema, nel senso che finisce lui il gestionale e mi ha sollevato dall’incarico, grazie per la gentile disponibilità. A buon rendere