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

ESTRAZIONE RCV - MODIFICA VECCHIA QUERY SYBASE

Andare in basso

ESTRAZIONE RCV - MODIFICA VECCHIA QUERY SYBASE

Messaggio  Lucio Mignone il Dom 6 Mar 2016 - 22:47

Ho provato a modificare questa query,che posto in coda, per renderla utilizzabile con postgres.
Ho prima avuto problemi con NUMBER(*) (istruzione eliminata) poi ovviamente con IF THEN ELSE... (sostituita con CASE WHEN..) poi con CHAIRINDEX (provato sostituzione con POSITION)poi con la concatenazione delle stringhe + '.' + (sostituito con || '.'||), alla fine sembrava girare ma...  genera errore.
Qualche MAESTRO sa darmi una mano?



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
avatar
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3589
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: ESTRAZIONE RCV - MODIFICA VECCHIA QUERY SYBASE

Messaggio  Cervino il Mer 9 Mar 2016 - 23:13

Ciao Lucio ,  traslare le query da Sybase a Postgre è molto indaginoso e problematico , meglio riscriverle ex-novo ( quantomeno si risparmia tempo ) ;  forse potrebbe esserTi utile come esempio parte della query ( estrapolazione veloce ) che uso per inviare il report annuale del Governo Clinico alla mia ATS di BS :

Select Distinct    bTrim( u.codice_regionale)  As  mmg_code ,         Cast( DateFormat( Today() , 'yyyymmdd' )  As Int)  As  query_d  ,                              
Cast( p.cognome ||'      '|| p.nome As Char(36))  As  paziente ,                     /* Column : paziente , to delete for Privacy , before sending report to ASL */
Cast( Case  When  p.sesso  ILike 'M'  Then  Substr( p.codice_fiscale, 5, 6) || Substr( n.pa_uslcode, 3, 5)  ||  Substr( p.codice_fiscale, 12, 5)  Else  Substr( n.pa_uslcode, 3, 5) || Substr( p.codice_fiscale, 12, 5) || Substr( p.codice_fiscale, 5, 6)  End  As Char (16))  As  cod_paz ,
Cast( Year( p.nascita) ||'0101' As Int ) As  nascita ,       bTrim( p.sesso) ,      bTrim( p.provincia_nascita) ,  
Cast( Days( p.nascita, Today()+1) * 24 / 8766 As SmallInt ) AS eta ,


( Select  Cast( Case  a.ac_val     When       '1'     Then  4             When    '2'      Then    4                     When   '3'     Then   4
When       'X'         Then         1                When     'N'        Then    1               When     ' '              Then     0
When       'E'         Then         2                When     'F'         Then    2              When      'M'            Then     2       

When       'Z'        Then          2                When     'O'        Then    3               When     'P'             Then     3             When       'S'            Then     3                  When    'V'         Then   3                Else    0    End   As SmallInt )
From  cart_accert a  Where  a.codice=p.codice  And  a.ac_des  ILike  'Fumo'  And  a.ac_val  Is Not Null  And Not Exists ( Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_des ILike 'Fumo' 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 ))
               _Fumo_  ,

( Select  Cast( DateFormat( a.data_open , 'yyyymmdd' ) As Int )  From  cart_accert a  Where a.codice = p.codice  And ( a.ac_des  ILike  '%Rischio%Card%Vascol%ISS%'  And  a.ac_val Is Not Null  And  a.data_open < Today())  And  Not Exists ( Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.ac_des ILike  '%Rischio%Card%Vascol%ISS%' 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 ))
               _RCV_d_  ,

( Select  a.ac_des  From  cart_accert a  Where a.codice = p.codice  And ( a.ac_des  ILike  '%Rischio%Card%Vascol%ISS%'  And  a.ac_val Is Not Null  And  a.data_open < Today())  And  Not Exists ( Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.ac_des ILike  '%Rischio%Card%Vascol%ISS%' 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 ))
               _RCV_  ,
                                                /*               Alternate  for  RCV_ISS
( Select  Case  When Position( '.' in  a.ac_val ) > 0  Then  OverLay( Left( a.ac_val , Length( a.ac_val)-1 ) placing ',' from Position( '.' in  Left( a.ac_val , Length( a.ac_val)-1 )) for 1) Else  Left( a.ac_val , Length( a.ac_val)-1 )  End  From cart_accert a  Where a.codice = p.codice  And ( a.ac_des  ILike  '%Rischio%Card%Vascol%ISS%'  And  Ascii( a.ac_val ) Between 48 And 57  And  a.data_open < Today())  And  Not Exists ( Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.ac_des ILike '%Rischio%Card%Vascol%ISS%'  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 a1.data_open < Today()))
               _Rcv_Iss_1_ ,                Non serve , conversione Automatica in :  .ods  e  .dbf */


( Select  Left( a.ac_val , Length( a.ac_val)-1 )  From  cart_accert a  Where a.codice = p.codice  And ( a.ac_des  ILike  '%Rischio%Card%Vascol%ISS%'  And  a.ac_val Is Not Null  And  a.data_open < Today())  And  Not Exists ( Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.ac_des ILike  '%Rischio%Card%Vascol%ISS%' 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 ))
               _Rcv_Iss_ ,                                                           

 
Case  When ( Select  a.ac_val  From  cart_accert a  Where a.codice=p.codice  And ( a.ac_des ILike  'Risch%Card%Vascol%ISS%' ) And  Not Exists  ( Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.ac_des ILike 'Risch%Card%Vascol%ISS%' 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 ))  Is Null       Then  Cast( 8 As SmallInt )   Else
(Select  Cast( Case  When  To_Number( a.ac_val , '999D999S' ) < 5    Then     1 
When     To_Number( a.ac_val , '999D999S' ) < 10                    Then     2
When     To_Number( a.ac_val , '999D999S' ) < 15                    Then     3
When     To_Number( a.ac_val , '999D999S' ) < 20                    Then     4
When     To_Number( a.ac_val , '999D999S' ) < 30                    Then     5
When     To_Number( a.ac_val , '999D999S' ) > 29.9                  Then     6       Else   8    End   As SmallInt )
From  cart_accert a  Where a.codice=p.codice  And ( a.ac_des ILike 'Risch%Card%Vascol%ISS%' And  Ascii( a.ac_val ) Between 48 And 57 ) And  Not Exists  ( Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.ac_des ILike 'Risch%Card%Vascol%ISS%' 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 ))  End
               _RCV_Iss_Cat_ 

FROM ( pazienti p   LEFT Outer JOIN   nos_002 n   ON   p.codice = n.codice )
                            LEFT Outer JOIN   v_utenti u   ON  n.pa_medi = u.userid
WHERE  u.codice_regionale  Like  '%'    AND    u.nome  Like  '%'
AND  p.pa_convenzione = 'S'            AND    Year( nascita)  Between  1955  And  1976
AND ( n.pa_drevoca Is Null  Or  n.pa_drevoca >  Today()  Or  ( n.pa_drevoca Between
Date( Today())-365  And Today() And motivo_revoca = 'S'))  And p.decesso Is Null
ORDER BY  8 , 3 


Adattale come utile esercizio alle Tue esigenze ,  testata in :  PgAdmin3 e MU v13.38.156
Ti saluto ,  Sergio  Tomasini ,  Orzivecchi  ( BS )

Cervino
Membro Junior
Membro Junior

Messaggi : 221
Punti : 3028
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: ESTRAZIONE RCV - MODIFICA VECCHIA QUERY SYBASE

Messaggio  Lucio Mignone il Gio 10 Mar 2016 - 12:01

Cervino ha scritto:Ciao Lucio ,  traslare le query da Sybase a Postgre è molto indaginoso e problematico , meglio riscriverle ex-novo ( quantomeno si risparmia tempo ) 

Sergio, me lo scrivi sempre Smile  e sono completamente d'accordo... 

Grazie per la query che hai postato mi è molto utile!
avatar
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3589
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: ESTRAZIONE RCV - MODIFICA VECCHIA QUERY SYBASE

Messaggio  Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Torna in alto

- Argomenti simili

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