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
****************************************************

help x estrazione cockroft

Pagina 2 di 2 Precedente  1, 2

Andare in basso

Re: help x estrazione cockroft

Messaggio  mario shirt il Gio 16 Giu 2016 - 18:57

Lucio Mignone ha scritto:



 Quindi a me questa funziona...

SELECT  Left( p.cognome, 1) || ' ' || Left( p.nome, 1) As paz ,  p.sesso , EXTRACT(YEAR FROM age(now(), P.datanasc)) as Eta_Oggi,
CASE WHEN (SELECT count(*) FROM cart_pazpbl b WHERE b.codice = p.codice AND b.cp_code  like  '401%' ) > 0  THEN 1 ELSE 0 END  _AHT_ ,
CASE WHEN (SELECT count(*) FROM cart_pazpbl b WHERE b.codice = p.codice AND b.cp_code  like  '250%' ) > 0  THEN 1 ELSE 0 END  _DM_ ,
( SELECT Round( To_Number( a.ac_val , '99999D999' ), 0)  FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_code = '3952' OR a.ac_des ILIKE '%Creat%Cock%' ) AND a.ac_val > ''  And  Not Exists ( Select a1.codice From cart_accert a1 Where a1.codice=a.codice
And ( a1.ac_code = '3952' OR a1.ac_des ILIKE '%Creat%Cock%' )  And (a1.data_open > a.data_open Or ( a1.data_open = a.data_open
And a1.rowid>a.rowid)) And a1.ac_val Is Not Null ) And Year( a.data_open) = '2015' )
    _Cockroft_ ,
( SELECT Round( To_Number( a.ac_val , '99999D999' ), 0)  FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_code = '5401' OR a.ac_des ILIKE '%mdrd%' ) AND a.ac_val > ''  And  Not Exists ( Select a1.codice From cart_accert a1 Where a1.codice=a.codice
And ( a1.ac_code = '5401' OR a1.ac_des ILIKE '%mdrd%' )  And (a1.data_open > a.data_open Or ( a1.data_open = a.data_open
And a1.rowid>a.rowid)) And a1.ac_val Is Not Null )      And Year( a.data_open) IN ( '2015' , '2014' ))
    _MDRD_ ,
 p.medico
FROM  v_pazienti p
WHERE   EXTRACT(YEAR FROM age(now(), P.datanasc)) >60 AND
 (( SELECT count(*) FROM cart_pazpbl b WHERE b.codice = p.codice AND ( b.cp_code ILIKE '401%' )) > 0
 OR ( SELECT count(*) FROM cart_pazpbl b WHERE b.codice = p.codice AND b.cp_code  like  '250%' ) > 0 )
ORDER BY 2 , 3 , 4
Anche a me,ma da il solito errore che non trova tutte le Cock o mdrd.
La cosa bellina e strana e' questa: copio e incollo la query, lancio tutto ok, cambio la lunghezza del cognome lancio e ok. Esco la richiamo e mi da ERRORE SQL SQLSTATE=0A00 Errore i riferimenti tra database diversi non sono implementati... Riesco chiudo milleutilita' rientro e mi da SQLSTATE 4261 nome qualificato improprio (troppi nomi puntati) public.public.public.now

misteri di centrali statistiche !!! Question Question

Mario
avatar
mario shirt
Membro Junior
Membro Junior

Messaggi : 246
Punti : 3151
Voti per importanza dei messaggi : 4
Data d'iscrizione : 21.02.11
Età : 63

Visualizza il profilo

Torna in alto Andare in basso

Re: help x estrazione cockroft

Messaggio  Lucio Mignone il Gio 16 Giu 2016 - 20:13

mario shirt ha scritto:
Lucio Mignone ha scritto:



 Quindi a me questa funziona...

SELECT  Left( p.cognome, 1) || ' ' || Left( p.nome, 1) As paz ,  p.sesso , EXTRACT(YEAR FROM age(now(), P.datanasc)) as Eta_Oggi,
CASE WHEN (SELECT count(*) FROM cart_pazpbl b WHERE b.codice = p.codice AND b.cp_code  like  '401%' ) > 0  THEN 1 ELSE 0 END  _AHT_ ,
CASE WHEN (SELECT count(*) FROM cart_pazpbl b WHERE b.codice = p.codice AND b.cp_code  like  '250%' ) > 0  THEN 1 ELSE 0 END  _DM_ ,
( SELECT Round( To_Number( a.ac_val , '99999D999' ), 0)  FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_code = '3952' OR a.ac_des ILIKE '%Creat%Cock%' ) AND a.ac_val > ''  And  Not Exists ( Select a1.codice From cart_accert a1 Where a1.codice=a.codice
And ( a1.ac_code = '3952' OR a1.ac_des ILIKE '%Creat%Cock%' )  And (a1.data_open > a.data_open Or ( a1.data_open = a.data_open
And a1.rowid>a.rowid)) And a1.ac_val Is Not Null ) And Year( a.data_open) = '2015' )
    _Cockroft_ ,
( SELECT Round( To_Number( a.ac_val , '99999D999' ), 0)  FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_code = '5401' OR a.ac_des ILIKE '%mdrd%' ) AND a.ac_val > ''  And  Not Exists ( Select a1.codice From cart_accert a1 Where a1.codice=a.codice
And ( a1.ac_code = '5401' OR a1.ac_des ILIKE '%mdrd%' )  And (a1.data_open > a.data_open Or ( a1.data_open = a.data_open
And a1.rowid>a.rowid)) And a1.ac_val Is Not Null )      And Year( a.data_open) IN ( '2015' , '2014' ))
    _MDRD_ ,
 p.medico
FROM  v_pazienti p
WHERE   EXTRACT(YEAR FROM age(now(), P.datanasc)) >60 AND
 (( SELECT count(*) FROM cart_pazpbl b WHERE b.codice = p.codice AND ( b.cp_code ILIKE '401%' )) > 0
 OR ( SELECT count(*) FROM cart_pazpbl b WHERE b.codice = p.codice AND b.cp_code  like  '250%' ) > 0 )
ORDER BY 2 , 3 , 4
Anche a me,ma da il solito errore che non trova tutte le Cock o mdrd.
La cosa bellina e strana e' questa: copio e incollo la query, lancio tutto ok, cambio la lunghezza del cognome lancio e ok. Esco la richiamo e mi da ERRORE SQL SQLSTATE=0A00 Errore i riferimenti tra database diversi non sono implementati... Riesco chiudo milleutilita' rientro e mi da SQLSTATE 4261 nome qualificato improprio (troppi nomi puntati) public.public.public.now

misteri di centrali statistiche !!! Question Question

Mario


Questo accade perchè tu uilizzi milleuilità che, sembrerà strano ma lo fa, modifica alcuni parametri della query automaticamente mentre interroga il database Postgres, soprattutto se uno lancia la query ripetutamente per più volte di seguito.
Controllare per credere. 
Riguarda la query che ti da errore e troverai alcune aggiunte di Milleutilità (es. la funzione NOW() diventa public.public.public.NOW() e dà errore...) che generano gli errori più strani che io abbia mai visto.
avatar
Lucio Mignone
Membro Senior
Membro Senior

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

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

Torna in alto Andare in basso

Re: help x estrazione cockroft

Messaggio  Lucio Mignone il Gio 16 Giu 2016 - 20:30

mario shirt ha scritto:

Grazie mille Sergio, sembra che funzioni alla perfezione, non mi sembra che ci siano assenze di risultati nell'estrazione.
Visto che ci siamo mi spieghi cosa vuol dire questa espressione SELECT Round( To_Number( a.ac_val , '99999D999' ) e soprattutto il valore 99999D999? e
AND Ascii( a.ac_val) BETWEEN 48 AND 57
Mario



La funzion Round arrootonda un valore con decimali, to_number converte un dato inserito come stringa in numero per poterci fare delle operazioni. 99999D999  è il formato del numero 5 cifre prima della virgola D indica che dopo sono decimali e tre cifre decimali...

AND Ascii( a.ac_val) BETWEEN 48 AND 57  questa la comprendo meno anch'io ma mi sembra un controllo che verifica  che il valore di ac_val sia essere tra i caratteri ASCII 48 e 57 che sono i caratteri ASCII dei numeri da 0 ad 9
avatar
Lucio Mignone
Membro Senior
Membro Senior

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

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

Torna in alto Andare in basso

Re: help x estrazione cockroft

Messaggio  mario shirt il Gio 16 Giu 2016 - 20:48

Lucio Mignone ha scritto:
mario shirt ha scritto:

Grazie mille Sergio, sembra che funzioni alla perfezione, non mi sembra che ci siano assenze di risultati nell'estrazione.
Visto che ci siamo mi spieghi cosa vuol dire questa espressione SELECT Round( To_Number( a.ac_val , '99999D999' ) e soprattutto il valore 99999D999? e
AND Ascii( a.ac_val) BETWEEN 48 AND 57
Mario



La funzion Round arrootonda un valore con decimali, to_number converte un dato inserito come stringa in numero per poterci fare delle operazioni. 99999D999  è il formato del numero 5 cifre prima della virgola D indica che dopo sono decimali e tre cifre decimali...

AND Ascii( a.ac_val) BETWEEN 48 AND 57  questa la comprendo meno anch'io ma mi sembra un controllo che verifica  che il valore di ac_val sia essere tra i caratteri ASCII 48 e 57 che sono i caratteri ASCII dei numeri da 0 ad 9
Grazie mille avevo intuito solo ASCII
Questo Forum e' piu' utile che leggere un libro.. Arrow
Mario
avatar
mario shirt
Membro Junior
Membro Junior

Messaggi : 246
Punti : 3151
Voti per importanza dei messaggi : 4
Data d'iscrizione : 21.02.11
Età : 63

Visualizza il profilo

Torna in alto Andare in basso

Re: help x estrazione cockroft

Messaggio  mario shirt il Gio 16 Giu 2016 - 20:57

Lucio Mignone ha scritto:





Questo accade perchè tu uilizzi milleuilità che, sembrerà strano ma lo fa, modifica alcuni parametri della query automaticamente mentre interroga il database Postgres, soprattutto se uno lancia la query ripetutamente per più volte di seguito.
Controllare per credere. 
Riguarda la query che ti da errore e troverai alcune aggiunte di Milleutilità (es. la funzione NOW() diventa public.public.public.NOW() e dà errore...) che generano gli errori più strani che io abbia mai visto.
Mi sembrava, pero' la maggior parte dei colleghi utilizza quello che c'e': MU !!! Io qualche volta provo PgAdmin ma trovo altri problemi (di mia gioventu' !!) ed e' improponibile ai miei colleghi...
e dovendo condividere le query con colleghi ancora piu' "scarsi" di me ho bisogno di semplicita' e capire...

Mario
avatar
mario shirt
Membro Junior
Membro Junior

Messaggi : 246
Punti : 3151
Voti per importanza dei messaggi : 4
Data d'iscrizione : 21.02.11
Età : 63

Visualizza il profilo

Torna in alto Andare in basso

Re: help x estrazione cockroft

Messaggio  Cervino il Ven 17 Giu 2016 - 1:51

Lucio Mignone ha scritto:
mario shirt ha scritto:
Anche a me,ma da il solito errore che non trova tutte le Cock o mdrd.
La cosa bellina e strana e' questa: copio e incollo la query, lancio tutto ok, cambio la lunghezza del cognome lancio e ok. Esco la richiamo e mi da ERRORE SQL SQLSTATE=0A00 Errore i riferimenti tra database diversi non sono implementati... Riesco chiudo milleutilita' rientro e mi da SQLSTATE 4261 nome qualificato improprio (troppi nomi puntati) public.public.public.now
misteri di centrali statistiche !!! Question Question     Mario

Mi sembrava, pero' la maggior parte dei colleghi utilizza quello che c'e': MU !!! Io qualche volta provo PgAdmin ma trovo altri problemi (di mia gioventu' !!) ed e' improponibile ai miei colleghi...
e dovendo condividere le query con colleghi ancora piu' "scarsi" di me ho bisogno di semplicita' e capire...  Mario


Questo accade perchè tu utilizzi milleuilità che, sembrerà strano ma lo fa, modifica alcuni parametri della query automaticamente mentre interroga il database Postgres, soprattutto se uno lancia la query ripetutamente per più volte di seguito.
Controllare per credere. 
Riguarda la query che ti da errore e troverai alcune aggiunte di Milleutilità (es. la funzione NOW() diventa public.public.public.NOW() e dà errore...) che generano gli errori più strani che io abbia mai visto.


Un' Invito inequivocabile ed esplicito ad abbandonare MU in favore di PgAdmin3 quando si deve Interrogare il MillePS , perlomeno ...

Per attivare PgAdmin3 :

Selezionare la relativa icona --> tasto Destro del Mouse --> esegui come Amministratore
--> cliccare sul quadratino con il + della voce  Server(s) 
--> si apre il sottomenu : selezionare la voce MillePS con il tasto Destro del Mouse --> Connetti  --> inserire la PassWord :
si apre un elenco di voci a discesa --> scendere 2 livelli e selezionare la voce milleps : si illumina l' icona SQL
--> selezionarla  e fare click con il mouse -->  si apre la finestra x le interrogazioni ( eventualmente ingrandirla facendo click sul relativo pulsante ) ; oltretutto è possibile aprire piu' finestre mentre in MU puoi utilizzare una singola finestra alla volta :  Facile, semplice e veloce ;
Copia ed incolla della query di interesse nella finestra SQL --> cliccare sul pulsante con la freccia rivolta verso Destra x eseguire la query
( vicino a quello con la lente : Trova e Sostituisci Testo, altro pulsante molto utile ) --> eventualmente dal menu File --> Salva per salvare la query con un nome a piacere ( meglio in una Cartella creata ad hoc )


Se x caso non dovesse comparire la voce  MillePS dal menu Server(s), bisogna registrare il MillePS ( la prima volta )

L' unica vera Difficoltà relativa é come salvare il risultato ottenuto, in quanto varie solo le opzioni : ma una volta definita la preferita, la procedura diventa semplice .
 
In teoria almeno ma spesso anche in pratica, è preferibile usare le formule di formattazione del valore numerico nelle query, con le funzioni :

 Round( To_Number( a.ac_val , '99999D999' ), 0 ) in quanto il valore inserito nel campo non sempre è omogeneo , posso avere ad es. :  
1.25   oppure  1,25   oppure  a1,25  oppure  a1.25b  oppure  1.a25 ...  x errore di digitazione o x modifica del formato numerico del SO ad es ;
quindi ho 2 possibilità : estrarre il valore reale come inserito, ma poi potrebbe risultare poco utile nella fase di elaborazione dei dati
oppure cercare di uniformare i valori come Numeri ( o stringhe se necessario ) ,  quindi utilizzo apposite funzioni come quelle sopraelencate unitamente a  Ascii( a.ac_val) BETWEEN 48 AND 57  che serve ad evitare il blocco della query in caso di valori alfanumerici ;
per completezza, nell' esempio sopraindicato, manca la funzione che sostituisce la virgola con il punto ( in questo caso apparentemente non necessaria in quanto i valori sono generati da MW ), che x il valore Creatinina potrebbe essere ( ma altre opzioni sono possibili ):

Round(  To_Number( Case  When Position( '.' in  a.ac_val ) > 0  Then  OverLay(  a.ac_val placing ',' from Position( '.' in  a.ac_val ) for 1)  Else  a.ac_val  End, '999D9999' ), 1)

Vi saluto ,  Sergio

Cervino
Membro Junior
Membro Junior

Messaggi : 221
Punti : 3025
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 64
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: help x estrazione cockroft

Messaggio  Lucio Mignone il Ven 17 Giu 2016 - 13:27

Cervino ha scritto:, manca la funzione che sostituisce la virgola con il punto ( in questo caso apparentemente non necessaria in quanto i valori sono generati da MW ), che x il valore Creatinina potrebbe essere ( ma altre opzioni sono possibili ):

Round(  To_Number( Case  When Position( '.' in  a.ac_val ) > 0  Then  OverLay(  a.ac_val placing ',' from Position( '.' in  a.ac_val ) for 1)  Else  a.ac_val  End, '999D9999' ), 1)

Vi saluto ,  Sergio

Quella dei numeri scritti con la virgola anziché con il punto è una vecchia storia, ampiamente discussa nel forum, la cui importanza ho cercato inutilmente di fare comprendere ai miei colleghi qui in zona...


Sergio,
Ascii( a.ac_val) BETWEEN 48 AND 57

meriterebbe qualche spiegazione in più se possibile...
avatar
Lucio Mignone
Membro Senior
Membro Senior

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

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

Torna in alto Andare in basso

Re: help x estrazione cockroft

Messaggio  Cervino il Sab 18 Giu 2016 - 1:34

Lucio Mignone ha scritto:
Quella dei numeri scritti con la virgola anziché con il punto è una vecchia storia, ampiamente discussa nel forum, la cui importanza ho cercato inutilmente di fare comprendere ai miei colleghi qui in zona...

Sergio,
Ascii( a.ac_val) BETWEEN 48 AND 57

meriterebbe qualche spiegazione in più se possibile...


Un esempio illustrerà sicuramente meglio di un lungo giro di parole : se per caso ho digitato per errore come risultato della Creatinina :
'a,b'    invece di    '1,2'   , eseguendo l' estrazione dei dati , avro' :

Select Round( To_Number( Case When Position( ',' in 'a,b' ) > 0 Then OverLay( 'a,b' Placing '.' From Position( ',' in  'a,b' ) For 1) Else 'a,b' End, '99999D9999' ), 2)

Errore  SQL ...     ,    aggiungendo    Ascii( a.ac_val) BETWEEN 48 AND 57   alla query / subquery :

Select Round( To_Number( Case When Position( ',' in 'a,b' ) > 0 Then OverLay( 'a,b' Placing '.' From Position( ',' in  'a,b' ) For 1) Else 'a,b' End, '99999D9999' ), 2) Where Ascii( 'a,b' ) Between 48 And 57



ottengo  un  campo  Round Numeric  vuoto  ma non il blocco della query e/o delle varie subquery .

Altri esempi :  con



Select Round( To_Number( Case When Position( ',' in '5a.4b' ) > 0 Then OverLay( '5a.4b' Placing '.' From Position( ',' in  '5a.4b' ) For 1) Else '5a.4b' End, '99999D9999' ), 2)

ottengo  '5.40'   ,       con  :

Select Round( To_Number( Case When Position( ',' in '5a.4b' ) > 0 Then OverLay( '5a.4b' Placing '.' From Position( ',' in  '5a.4b' ) For 1) Else '5a.4b' End, '99999D9999' ), 2) Where Ascii( '5a.4b' ) Between 48 And 57   


ottengo  '5.40'      con  :

Select Round( To_Number( Case When Position( ',' in 'a5.4b' ) > 0 Then OverLay( 'a5.4b' Placing '.' From Position( ','
in  'a5.4b' ) For 1) Else 'a5.4b' End, '99999D9999' ), 2)


Errore  SQL ...    ,       aggiungendo    Ascii( a.ac_val) BETWEEN 48 AND 57   alla query / subquery : 

Select Round( To_Number( Case When Position( ',' in 'a5.4b' ) > 0 Then OverLay( 'a5.4b' Placing '.' From Position( ',' in  'a5.4b' ) For 1) Else 'a5.4b' End, '99999D9999' ), 2) Where Ascii( 'a5.4b' ) Between 48 And 57 

ottengo  un  campo  Round Numeric  vuoto  ma non il blocco della query e/o delle varie subquery ...      ma  con  :

Select Round( To_Number( 'a,cb', '99999D9999' ), 2)   -->  Errore  SQL ...          con : 
 
 
 Select Round( To_Number( 'a,cb', '99999D9999' ), 2) Where Ascii( 'a5.4b' ) Between 48 And 57   


ottengo  un  campo  Round Numeric  vuoto ,             con : 

Select Round( To_Number( 'a5.4b', '99999D9999' ), 2) Where Ascii( 'a5.4b' ) Between 48 And 57  

ottengo  un  campo  Round Numeric  vuoto ,             con : 

Select Round( To_Number( 'a5.4b', '99999D9999' ), 2)  ottengo  '5.40'   ma  in  realta  la subquery  si  blocca


Saluti ,  Sergio

Cervino
Membro Junior
Membro Junior

Messaggi : 221
Punti : 3025
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 64
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: help x estrazione cockroft

Messaggio  Lucio Mignone il Dom 19 Giu 2016 - 22:35

Cervino ha scritto:
Lucio Mignone ha scritto:
..

Sergio,
Ascii( a.ac_val) BETWEEN 48 AND 57

meriterebbe qualche spiegazione in più se possibile...

....

Un esempio illustrerà sicuramente meglio di un lungo giro di parole :
Saluti ,  Sergio


Mille grazie Sergio, chiarissimo.
avatar
Lucio Mignone
Membro Senior
Membro Senior

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

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

Torna in alto Andare in basso

Re: help x estrazione cockroft

Messaggio  Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Pagina 2 di 2 Precedente  1, 2

Torna in alto

- Argomenti simili

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