Newsgroup: it.comp.software.database
Titolo: valori su nuova colonna su query

ciao, spero possiate aiutarmi.
ho una vista con due colonne, nome e età (l'età è per fortuna un numero
intero). voglio creare una terza colonna in cui se per esempio l'età è
compresa tra 0 e 17 anni, appaia minorenni, se l'età è dai 70 in su appaia
anziani, e via dicendo. Come dovrei fare in sql? ho provato con IF
(select...) etc etc, ma non so poi qual'è il comando che faccia scrivere
'anziani' sulla terza colonna.
Grazie in anticipo per le risposte.
ciao!

Non ho lavorato mai con le viste perchč uso MySQL e lě non ci sono.
Ti chiedo: sbaglio oppure le viste sono delle query vere e proprie?
Quindi avraai una cosa tipo:
SELECT Nome, Eta
FROM ...
Quindi dovresti modificarla in questo modo:
SELECT Nome, Eta, IF(Eta BETWEEN 0 AND 17, 'Minorenne', ...) AS Tipo
Ma se guardi bene nel set ti istruzioni del tuo database, troverai 
sicuramente qualcosa come i SELECT CASE che ti permette di eseguire un 
confronto a cascata su un set di valori.
Darkbyte
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello (A. Celentano).
  ___   _   ___ _  _______   _______ ___
|   \ /_\ | _ \ |/ / _ ) \ / /_   _| __|
| |) / _ \|   / ' <| _ \\ V /  | | | _|
|___/_/ \_\_|_\_|\_\___/ |_|   |_| |___|


Eccoti un esempio. E' in SQL standard, per cui dovrebbe funzionare in
quasi tutti i DBMS.
SELECT
    nome, eta,
    CASE
         WHEN eta < 18 THEN "pischello"
         WHEN eta between 18 and 21 THEN "carne fresca"
         WHEN eta between 21 and 30 THEN "smaliziato"
         WHEN eta between 31 AND 40 THEN "rampante"
         WHEN eta between 41 AND 50 THEN "marpione"
         WHEN eta between 51 AND 60 THEN "esperto"
         WHEN eta between 61 and 70 THEN "vecchia volpe"
         WHEN eta > 70 THEN "decadente"
    ELSE
        "Oops! Non ho consoderato " || eta
    END AS condizione
FROM
    nometabella
Ciao
gmax
-- 
   ____ ____  _____ _   _
  / _  |    \(____ ( \ / )
( (_| | | | / ___ |) X (
  \___ |_|_|_\_____(_/ \_)
(_____|
MySQL Certified Professional
Sapere, saper fare, fare, far sapere
http://gmax.oltrelinux.com

> ciao!
Mi intrometto,per capire,perche' usare una colonna per memorizzare 
quello che a me sembra un risultato di una operazione, non sarebbe
meglio fare questo calcolo 'al volo' con il linguaggio di programmazione 
sul front-end? Ciao Jack

 sul front-end? Ciao Jack
Io credo che quante più cose si possano far fare al database tanto 
meglio per l'applicazione.
Nel senso che se bisogna leggere una certa quantità di record e, per 
ognuno di loro, eseguire un calcolo lato applicazione la cosa diventa 
più lenta rispetto a farlo fare al db indicandoglielo in una query.
-- 
Quando noi ignoranti eravamo di più, tutto era più bello (A. Celentano).


 
Si si, hai ragione nel dire che diventa piu' lenta,ma in teoria e' la 
piu' corretta ?
Ciao Jack

 Ciao Jack
Ciao Darkbyte



Dipende dalle circostanze.
Se la query resta cosi' come l'ho messa io, probabilmente non cambia molto
se la si fa dal lato server o dal lato client.
Se la formula viene usata per memorizzare su un'altra tabella, allora e' meglio che ci pensi il database direttamente. 
Come dovrebbe essere un'operazione di database l'uso della formula per generare valori da usare con GROUP BY.
Per esempio:
SELECT
    CASE
         WHEN eta < 18 THEN "pischello"
         WHEN eta between 18 and 21 THEN "carne fresca"
         WHEN eta between 21 and 30 THEN "smaliziato"
         WHEN eta between 31 AND 40 THEN "rampante"
         WHEN eta between 41 AND 50 THEN "marpione"
         WHEN eta between 51 AND 60 THEN "esperto"
         WHEN eta between 61 and 70 THEN "vecchia volpe"
         WHEN eta > 70 THEN "decadente"
    END AS condizione,
    COUNT(*)
FROM
    nometabella
GROUP BY
   condizione
In questo caso, e' meglio farlo dal lato server. Poi ci sono considerazioni sull'efficienza, ma sarebbe un altro 
argomento, e meriterebbe ben altro spazio.


 Ciao Darkbyte
Bye
-- 
Luca Bianchi
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org

 gmax
Grazie per le spiegazioni,gmax,Darkbyte,Luca Bianchi.
Ciao Jack

Appunto... allora dico bene che è meglio lasciare che il db si occupi di 
quante più cose possibili...


 di quante più cose possibili...
Ni...
Che tradotto significa SI per quello di cui stiamo parlando (operazioni sui 
dati) e NO per attività che nulla hanno a che fare con un database server ad 
esempio generazione di un documento word, formattazione di un importo con i 
simboli della valuta e, più in generale, tutti gli aspetti di competenza 
dello "strato visualizzazione"...


 dello "strato visualizzazione"...
In effetti mi riferivo ai calcoli sui dati da prelevare.
Se fra i dati dell'archivio non ci sono certe informazioni (che comunque 
sono ottenibili dai dati presenti) allora è sempre meglio che sia il db 
ad occuparsi di generarli.
