FORUM PER UTENTI MILLEWIN
Attenzione !
Per intervenire sul forum è necessario essere registrati e connessi.

L'Amministratore

****************************************************
“Se tu hai una mela ed io ho una mela, e ce la scambiamo, alla fine tu ed io avremo sempre una mela ciascuno.
Ma se tu hai un’idea ed io ho un’idea, e ce la scambiamo, allora avremo entrambi due idee”.

George Bernard Shaw
****************************************************

SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Pagina 2 di 2 Precedente  1, 2

Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Mar 29 Nov 2011 - 9:04

Admin ha scritto:Bene, bravo la query è lineare e funziona
Grazie Giuseppe , ragazzi sentirmi dire bravo "da lo mio maestro" è una soddisfazione...

Usare la numerazione con la funzione UNION diventa problematico per cui ho preferito eliminarla.
Mi ero reso conto del problema

Quando si usa UNION è indispensabile che tutte le estrazioni abbiano colonne equivalenti come numero e tipo.
Avevo intuito ma non sono riuscito a risolvere da solo...
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Mer 30 Nov 2011 - 0:22

Esaminando la query sul BMI postata in precedenza:

SELECT number (*) As N, cognome, nome, datavisita, datanasc, Years(datanasc, datavisita) As eta, sesso As __sesso__, ' ', accertamento As Tipo_di_Rilevazione, Cast(risults As Dec(4,1)) As Valore_BMI,

(IF ( Valore_BMI< '18.5') Then ' SottoPeso ' Else IF ( Valore_BMI Between '18.5' And '24.9') Then ' NormoPeso ' Else IF (Valore_BMI Between '25' And '29.9') Then ' Sovrappeso ' Else IF (Valore_BMI Between '30' And '34.9') Then ' Obesità 1a classe ' Else IF (Valore_BMI Between '35' And '39.9') Then ' Obesità 2a classe ' Else IF ( Valore_BMI >'39.9') Then ' Obesità 3a classe' Else ' ? ' Endif Endif Endif Endif Endif Endif) As ___Valutazione___

FROM v_accertamenti a
Where accertamento Like '%BMI%' And Not Exists
(Select a1.codice FROM v_Accertamenti a1 Where a1.codice = a.codice And a1.accertamento Like '%BMI%' And a1.datavisita > a.datavisita)
And eta Between 40 And 60

Group By risults, cognome, nome, datanasc, eta, sesso, datavisita, accertamento
Order By 1, 2, 3


Ricordando un magistrale post di Giampiero su rsults e risultn e successive precisazioni di Giuseppe,
in questa query se al posto di Cast(risults As Dec(4,1)) metto semplicemente risults mi pare che trattandosi di viste e non di tabelle non cambi niente...
Ho capito bene?

Ho provato ad adattare la stessa query per estrarre i pz con RCV calcolato e proporre una valutazione del rischio così come fatto per il BMI, eccola


SELECT number (*) As N, cognome, nome, datavisita, datanasc, Years(datanasc, datavisita) As eta, sesso As __sesso__, accertamento As _____Tipo___di___Rilevazione_____, risults As ____Percentuale_Rischio____,

(IF (risults < '3.9') Then ' Basso Rischio ' Else IF (risults Between '4' And '19.9') Then ' Rischio Medio ' Else IF (risults > '20') Then ' Alto Rischio' Endif Endif Endif) ___Valutazione___

FROM v_accertamenti a
Where accertamento Like 'calcolo rischio cardiovascolare (iss)' And Not Exists
(Select a1.codice FROM v_Accertamenti a1 Where a1.codice = a.codice And a1.accertamento Like 'calcolo rischio cardiovascolare (iss)' And a1.datavisita > a.datavisita)
And eta Between 40 And 60

Group By risults, cognome, nome, datanasc, eta, sesso, datavisita, accertamento
Order By 1, 2, 3


In questo caso non funziona la valutazione poiché mi pare di capire che risults non viene valutato come un numero (forse perché trattasi di valore percentuale?). La situazione non migliora utilizzando Cast(risults As Dec(4,1)) oppure Cast(risults As FLOAT)
Dov'è che sbaglio?


Qualcosa ottengo modificando la valutazione come segue
(IF (FLOOR(risults) < '3.9') Then ' Basso Rischio ' Else IF ((FLOOR(risults) Between '4' And '19.9') Then ' Rischio Medio ' Else IF ((FLOOR(risults) > '20') Then ' Alto Rischio' Endif Endif Endif) ___Valutazione___


che mi sembra confermare la necessita di trasformare il valore percentuale di risults in un numero vero...
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  GiampiMaz il Mer 30 Nov 2011 - 12:25

Ciao
naturalmente risults, che ricordo è una stringa, va trasformato in numero per poter fare poi confronti numerici.
A scopo didattico ti mostro questa query:
LENGTH (risults)-1) As _perc_Rischio_ comincia col togliere il % (toglie l'ultimo carattere)

cast( (If charindex(',', _perc_Rischio_ )>0 then (substring( _perc_Rischio_ ,1,(charindex(',',_perc_Rischio_ ) - 1 )) + '.' + substring(_perc_Rischio_ , (charindex(',',_perc_Rischio_ ) +1 )) ) else _perc_Rischio_ endif) AS DEC (4,1) ) as punto

è analoga a quella già postata da me e sostituisce la virgola col punto e trasforma la stringa risultante in numero. DA NOTARE che con le viste millewin mostrerà ancora il risultato con la virgola! (ma ora è un numero col punto). Tutta questa menata è perchè non ho trovato un comando, che esiste in altri dialetti sql, per sostituire semplicemente un carattere con un altro.
Ora punto può essere usato per i confronti.
Vi era una lieve imperfezione nella condizione di controllo (IF (.. < '3.9')... IF ( .. >'20' .... che lasciava scoperti i valori limite 4 e 20
giampiero



SELECT number (*) As N, cognome, nome, datavisita, datanasc, Years(datanasc, datavisita) As eta, sesso As __sesso__, accertamento As _____Tipo___di___Rilevazione_____ , substring( risults, 1,LENGTH (risults)-1) As _perc_Rischio_,

cast( (If charindex(',', _perc_Rischio_ )>0 then (substring( _perc_Rischio_ ,1,(charindex(',',_perc_Rischio_ ) - 1 )) + '.' + substring(_perc_Rischio_ , (charindex(',',_perc_Rischio_ ) +1 )) ) else _perc_Rischio_ endif) AS DEC (4,1) ) as punto,

(IF (punto < '4') Then ' Basso Rischio ' Else IF (punto Between '4' And '19.9') Then ' Rischio Medio ' Else IF (punto > '19.9') Then ' Alto Rischio' else '?' Endif Endif Endif) ___Valutazione___

FROM v_accertamenti a
Where accertamento Like 'calcolo rischio cardiovascolare (iss)' And Not Exists
(Select a1.codice FROM v_Accertamenti a1 Where a1.codice = a.codice And a1.accertamento Like 'calcolo rischio cardiovascolare (iss)' And a1.datavisita > a.datavisita)
And eta Between 40 And 60

Group By risults, cognome, nome, datanasc, eta, sesso, datavisita, accertamento
Order By 1, 2, 3


GiampiMaz
GiampiMaz
Membro Junior
Membro Junior

Messaggi : 122
Punti : 3116
Voti per importanza dei messaggi : 33
Data d'iscrizione : 20.02.11

Visualizza il profilo

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Mer 30 Nov 2011 - 15:22

Non per essere pedante e ripetitivo ma In primis grazie!
Il valore di questo forum è enorme...
Vi voglio bene!
Qualcuno snobba il nostro forum dicendo che un posto dove scrivono una ventina di colleghi non è un forum, qualche altro devo riconoscere che ne ha grande rispetto.
Io dico che quella ventina di colleghi che scrivono possono tenere sveglia la catogoria e renderla più autonoma ed intraprendente, poi preciso che abbiamo 773 iscritti Smile
Scusate l'off topic e veniamo al dunque.


GiampiMaz ha scritto:Ciao
naturalmente risults, che ricordo è una stringa, va trasformato in numero per poter fare poi confronti numerici.
A scopo didattico ti mostro questa query:
LENGTH (risults)-1) As _perc_Rischio_ comincia col togliere il % (toglie l'ultimo carattere)

cast( (If charindex(',', _perc_Rischio_ )>0 then (substring( _perc_Rischio_ ,1,(charindex(',',_perc_Rischio_ ) - 1 )) + '.' + substring(_perc_Rischio_ , (charindex(',',_perc_Rischio_ ) +1 )) ) else _perc_Rischio_ endif) AS DEC (4,1) ) as punto

è analoga a quella già postata da me e sostituisce la virgola col punto e trasforma la stringa risultante in numero.
Capito tutto. Un chiarimento se al posto di risults si fosse trattatato di ac_val teoricamente, non avrei avuto bisogno di questa trasformazione se avessi scritto tutti i miei valori con il punto. Ma, come hai spiegato in un precedente post, poichè spesso utilizziamo la virgola in quanto italiani, meglio essere sicuri e trasformare in ogni caso ac_val in un numero con il punto.


Tutta questa menata è perchè non ho trovato un comando, che esiste in altri dialetti sql, per sostituire semplicemente un carattere con un altro.
se lo trovi facci sapere.

Vi era una lieve imperfezione nella condizione di controllo (IF (.. < '3.9')... IF ( .. >'20' .... che lasciava scoperti i valori limite 4 e 20
giampiero

mi ero accorto che non funzionava mi sottolinei bene dov'era l'errore?
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  GiampiMaz il Mer 30 Nov 2011 - 18:57

Dunque Lucio
vedo che ero stato impreciso (sempre la solita fretta), ora mi spiego meglio:

(IF (risults < '3.9') Then ' Basso Rischio ' Else IF (risults Between '4' And '19.9') Then ' Rischio Medio ' Else IF (risults > '20') Then ' Alto Rischio' Endif Endif Endif) ___Valutazione___

significa SE risults è minore di 3,9 ALLORA 'Rischio Basso' ALTRIMENTI SE risults è tra 4 e 19,9 ALLORA 'Rischio Medio'....
resta fuori il valore 3,9 che non è minore di 3,9 né è tra 4 e 19,9 quindi cambiando (risults < '4') copriamo tutti i valori

analogo Else IF (risults Between '4' And '19.9') Then ' Rischio Medio ' Else IF (risults > '20') Then ' Alto Rischio'
il valore 20 non è compreso nè tra 4 e 19,9 né è > 20 occorre mettere >19,9 in modo da comprendere anche 20

giampiero
GiampiMaz
GiampiMaz
Membro Junior
Membro Junior

Messaggi : 122
Punti : 3116
Voti per importanza dei messaggi : 33
Data d'iscrizione : 20.02.11

Visualizza il profilo

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Gio 1 Dic 2011 - 10:11

GiampiMaz ha scritto:Dunque Lucio
vedo che ero stato impreciso (sempre la solita fretta), ora mi spiego meglio:

(IF (risults < '3.9') Then ' Basso Rischio ' Else IF (risults Between '4' And '19.9') Then ' Rischio Medio ' Else IF (risults > '20') Then ' Alto Rischio' Endif Endif Endif) ___Valutazione___

significa SE risults è minore di 3,9 ALLORA 'Rischio Basso' ALTRIMENTI SE risults è tra 4 e 19,9 ALLORA 'Rischio Medio'....
resta fuori il valore 3,9 che non è minore di 3,9 né è tra 4 e 19,9 quindi cambiando (risults < '4') copriamo tutti i valori

analogo Else IF (risults Between '4' And '19.9') Then ' Rischio Medio ' Else IF (risults > '20') Then ' Alto Rischio'
il valore 20 non è compreso nè tra 4 e 19,9 né è > 20 occorre mettere >19,9 in modo da comprendere anche 20

giampiero

Pensa che l'avevo letta e riletta senza rendermi conto del problema, sono messO proprio male!
L'unica cosa che non mi piace è che la query mostra le due colonne con la percentuale di rischio ed i valori di punto.
Ho provato a capire se si poteva non mostrare una delle due senza riuscirci.


Ultima modifica di Lucio Mignone il Dom 6 Mag 2012 - 15:12, modificato 1 volta
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  GiampiMaz il Gio 1 Dic 2011 - 12:41

Caro Lucio
come specificavo, la mia query ha una valenza didattica per mostrare i vari passaggi, così com'è non si possono togliere le varie colonne poichè servono come variabili per il calcolo. Ma sostituendo alla variabile l'equazione che l'ha prodotta si possono eliminare le colonne, anche tutte e due!
Te lo lascio come compito a casa, prova che poi magari (ora ho i vaccini) ti dò la soluzione.
giampiero
GiampiMaz
GiampiMaz
Membro Junior
Membro Junior

Messaggi : 122
Punti : 3116
Voti per importanza dei messaggi : 33
Data d'iscrizione : 20.02.11

Visualizza il profilo

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Gio 1 Dic 2011 - 20:53

GiampiMaz ha scritto:Caro Lucio
come specificavo, la mia query ha una valenza didattica per mostrare i vari passaggi, così com'è non si possono togliere le varie colonne poichè servono come variabili per il calcolo. Ma sostituendo alla variabile l'equazione che l'ha prodotta si possono eliminare le colonne, anche tutte e due!
Te lo lascio come compito a casa, prova che poi magari (ora ho i vaccini) ti dò la soluzione.
giampiero

Tu mi dici quello che devo fare... ed io lo faccio Smile

SELECT number (*) As N, cognome, nome, datavisita, datanasc, Years(datanasc, datavisita) As eta, sesso As __sesso__, accertamento As _____Tipo___di___Rilevazione_____ , substring( risults, 1, 6) As _perc_Rischio_,

(IF (cast( (If charindex(',', substring( risults, 1,LENGTH (risults)-1))>0 then (substring( substring( risults, 1,LENGTH (risults)-1),1,(charindex(',',substring( risults, 1,LENGTH (risults)-1)) - 1 )) + '.' + substring(substring( risults, 1,LENGTH (risults)-1) , (charindex(',',substring( risults, 1,LENGTH (risults)-1)) +1 )) ) else substring( risults, 1,LENGTH (risults)-1) endif) AS DEC (4,1) ) < '4') Then ' Basso Rischio ' Else IF (cast( (If charindex(',', substring( risults, 1,LENGTH (risults)-1) )>0 then (substring( substring( risults, 1,LENGTH (risults)-1) ,1,(charindex(',',substring( risults, 1,LENGTH (risults)-1) ) - 1 )) + '.' + substring(substring( risults, 1,LENGTH (risults)-1), (charindex(',',substring( risults, 1,LENGTH (risults)-1) ) +1 )) ) else substring( risults, 1,LENGTH (risults)-1) endif) AS DEC (4,1) ) Between '4' And '19.9') Then ' Rischio Medio ' Else IF (cast( (If charindex(',', substring( risults, 1,LENGTH (risults)-1) )>0 then (substring( substring( risults, 1,LENGTH (risults)-1) ,1,(charindex(',',substring( risults, 1,LENGTH (risults)-1) ) - 1 )) + '.' + substring(substring( risults, 1,LENGTH (risults)-1) , (charindex(',',substring( risults, 1,LENGTH (risults)-1) ) +1 )) ) else substring( risults, 1,LENGTH (risults)-1) endif) AS DEC (4,1) ) > '19.9') Then ' Alto Rischio' else '?' Endif Endif Endif) ___Valutazione___

FROM v_accertamenti a
Where accertamento Like 'calcolo rischio cardiovascolare (iss)' And Not Exists
(Select a1.codice FROM v_Accertamenti a1 Where a1.codice = a.codice And a1.accertamento Like 'calcolo rischio cardiovascolare (iss)' And a1.datavisita > a.datavisita)
And eta Between 40 And 60

Group By ___Valutazione___, cognome, nome, datanasc, eta, sesso, datavisita, accertamento, risults
Order By 1, 2, 3, 4
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  GiampiMaz il Gio 1 Dic 2011 - 23:33

Lucio sei diventato bravissimo!
Sembra una cosa mostruosa ma è solo da assemblare a pezzi.

substring( risults, 1, 6) As _perc_Rischio_, perchè non semplicemente risults AS _perc_rischio_, ?

giampiero
GiampiMaz
GiampiMaz
Membro Junior
Membro Junior

Messaggi : 122
Punti : 3116
Voti per importanza dei messaggi : 33
Data d'iscrizione : 20.02.11

Visualizza il profilo

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Gio 1 Dic 2011 - 23:42

GiampiMaz ha scritto:Lucio sei diventato bravissimo!
Sembra una cosa mostruosa ma è solo da assemblare a pezzi.

substring( risults, 1, 6) As _perc_Rischio_, perchè non semplicemente risults AS _perc_rischio_, ?

giampiero

Touché...
Ehm... Mi sono lasciato prendere dall'entusiasmo!

Tu se' lo mio maestro e 'l mio autore;
tu se' solo colui da cu' io tolsi
lo bello stilo che m'ha fatto onore


Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Pagina 2 di 2 Precedente  1, 2

Torna in alto


 
Permessi di questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum