ESTRAZIONE RCV - MODIFICA VECCHIA QUERY SYBASE
2 partecipanti
ESTRAZIONE RCV - MODIFICA VECCHIA QUERY SYBASE
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
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
Re: ESTRAZIONE RCV - MODIFICA VECCHIA QUERY SYBASE
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 )
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
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: ESTRAZIONE RCV - MODIFICA VECCHIA QUERY SYBASE
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 e sono completamente d'accordo...
Grazie per la query che hai postato mi è molto utile!
Argomenti simili
» query sybase per LAMA e glaucoma
» modifica query in utilizzatori di postgresql
» richiesta modifica estrazione Emoglobina Glicata
» Sybase Vs PostgreSQL
» sybase o postgres era owidctlpar
» modifica query in utilizzatori di postgresql
» richiesta modifica estrazione Emoglobina Glicata
» Sybase Vs PostgreSQL
» sybase o postgres era owidctlpar
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.