help x estrazione cockroft
3 partecipanti
Pagina 2 di 2 • 1, 2
Re: help x estrazione cockroft
Anche a me,ma da il solito errore che non trova tutte le Cock o mdrd.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
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 !!!
Mario
mario shirt- Membro Junior
- Messaggi : 254
Punti : 5389
Voti per importanza dei messaggi : 4
Data d'iscrizione : 21.02.11
Età : 69
Re: help x estrazione cockroft
mario shirt ha scritto:Anche a me,ma da il solito errore che non trova tutte le Cock o mdrd.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
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 !!!
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.
Re: help x estrazione cockroft
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
Re: help x estrazione cockroft
Grazie mille avevo intuito solo ASCIILucio 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
Questo Forum e' piu' utile che leggere un libro..
Mario
mario shirt- Membro Junior
- Messaggi : 254
Punti : 5389
Voti per importanza dei messaggi : 4
Data d'iscrizione : 21.02.11
Età : 69
Re: help x estrazione cockroft
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...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.
e dovendo condividere le query con colleghi ancora piu' "scarsi" di me ho bisogno di semplicita' e capire...
Mario
mario shirt- Membro Junior
- Messaggi : 254
Punti : 5389
Voti per importanza dei messaggi : 4
Data d'iscrizione : 21.02.11
Età : 69
Re: help x estrazione cockroft
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 !!! 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
- Messaggi : 245
Punti : 5281
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: help x estrazione cockroft
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...
Re: help x estrazione cockroft
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
- Messaggi : 245
Punti : 5281
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: help x estrazione cockroft
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.
Pagina 2 di 2 • 1, 2
Argomenti simili
» estrazione suggeriti
» ESTRAZIONE FATTURE
» ESTRAZIONE FATTURE
» estrazione di pz stranieri
» estrazione un pò...particolare
» ESTRAZIONE FATTURE
» ESTRAZIONE FATTURE
» estrazione di pz stranieri
» estrazione un pò...particolare
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.