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)
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).