Query per tipo di contatto
4 partecipanti
Pagina 1 di 1
Query per tipo di contatto
Ciao a tutti
Avrei bisogno di una piccola dritta con una query: mi interesserebbe "scorporare" la conta degli Accessi del modello "Privacy" in Centrale statistiche nei diversi Tipi di Contatto registrabili (Visita ambulatoriale, domiciliare, Telefonata, Richiesta indiretta, Consultazione scheda, contatto per altri motivi))....chiedo troppo?
Grazie se qualcuno vorrà darmi una mano!
Francesco
Avrei bisogno di una piccola dritta con una query: mi interesserebbe "scorporare" la conta degli Accessi del modello "Privacy" in Centrale statistiche nei diversi Tipi di Contatto registrabili (Visita ambulatoriale, domiciliare, Telefonata, Richiesta indiretta, Consultazione scheda, contatto per altri motivi))....chiedo troppo?
Grazie se qualcuno vorrà darmi una mano!
Francesco
francesco83go- Nuovo Membro
- Messaggi : 30
Punti : 4892
Voti per importanza dei messaggi : 13
Data d'iscrizione : 15.08.11
Re: Query per tipo di contatto
Richiesta Non semplice con varie opzioni . Ho trovato ( e adattato ) 2 vecchie query al riguardo :
la prima x un riepilogo generale :
Select ( Case tipo
When 'ad' Then ' Ambulatoriale Diretto'
When 'ai' Then ' Ambulatoriale Indiretto'
When 'td' Then ' Telefonico Diretto'
When 'ti' Then ' Telefonico Indiretto'
When 'dd' Then ' Domiciliare Diretto'
When 'di' Then ' Domiciliare Indiretto'
When 'av' Then ' Accesso x Valutazione'
Else ' Non Specificato' End ) As tipo_contatto , Cast( Upper( tipo) As Char(6)) ,
Count(*) As totale , Cast( ' I trim 2014 ' As Char(18)) As periodo
FROM cart_visite
Where data_open Between '2014-01-01' And '2014-03-31'
Group By tipo
Order By tipo_contatto
e la seconda analitica :
Select Distinct Cast( p.cognome As Char(16)) , p.nome , p.nascita , p.sesso ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AD'
And v.data_open Between inizio And fine )
_amb_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AI'
And v.data_open Between inizio And fine )
_amb_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DD'
And v.data_open Between inizio And fine )
_domic_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DI'
And v.data_open Between inizio And fine )
_domic_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AV'
And v.data_open Between inizio And fine )
_acc_val_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TD'
And v.data_open Between inizio And fine )
_tel_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TI'
And v.data_open Between inizio And fine )
_tel_i_ ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And tipo Not In ( 'AD' , 'AI' , 'TD' , 'TI' , 'DD' , 'DI' , 'AV' )
And v.data_open Between inizio And fine )
_n_s_ , Cast( ' 'As Char(3)) As s ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And v.data_open Between inizio And fine )
_tot_acc_ ,
Cast( p.codice_fiscale As Char(24)) ,
Cast( '2014-01-01' As Char(16)) As inizio , Cast( '2014-03-31' As Char(16)) As fine , p.codice
FROM (( pazienti p Left Join nos_002 n On p.codice = n.codice )
Left Join v_utenti u On n.pa_medi = u.userid )
Left Join cart_visite v On p.codice = v.codice
Where u.codice_regionale Like '%' And u.nome Like '%'
And p.pa_convenzione = 'S'
And Year( nascita) Between 1900 And 2014
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or (n.pa_drevoca Between Today()-365 And Today() And motivo_revoca ='S' )) And p.decesso Is Null
And v.data_open Between inizio And fine And v.data_open Is Not Null
Group By p.cognome , p.nome , p.nascita , p.sesso , p.codice_fiscale , p.codice
Order By 1, 2
( spero funzioni ancora ) . Per interrogare il MillePS ( in caso di migrazione a PostgreSQL ) utilizzare :
Select Distinct Cast( p.cognome As Char(16)) , p.nome , p.nascita , p.sesso ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AD'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_amb_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AI'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_amb_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DD'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_domic_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DI'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_domic_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AV'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_acc_val_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TD'
And data_open Between '2014-01-01' And '2014-03-31' )
_tel_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TI'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_tel_i_ ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And tipo Not In ( 'AD' , 'AI' , 'TD' , 'TI' , 'DD' , 'DI' , 'AV' )
And v.data_open Between '2014-01-01' And '2014-03-31' )
_n_s_ , Cast( ' 'As Char(3)) As s ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And v.data_open Between '2014-01-01' And '2014-03-31' )
_tot_acc_ ,
Cast( p.codice_fiscale As Char(24)) ,
Cast( '2014-01-01' As Char(16)) As inizio , Cast( '2014-03-31' As Char(16)) As fine , p.codice
FROM (( pazienti p Left Join nos_002 n On p.codice = n.codice )
Left Join v_utenti u On n.pa_medi = u.userid )
Left Join cart_visite v On p.codice = v.codice
Where u.codice_regionale Like '%' And u.nome Like '%'
And p.pa_convenzione = 'S'
And Year( nascita) Between 1900 And 2014
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or (n.pa_drevoca Between Today()-365 And Today() And motivo_revoca ='S' )) And p.decesso Is Null
And v.data_open Between '2014-01-01' And '2014-03-31' And v.data_open Is Not Null
Group By p.cognome , p.nome , p.nascita , p.sesso , p.codice_fiscale , p.codice
Order By 1, 2
Ti saluto , Sergio
la prima x un riepilogo generale :
Select ( Case tipo
When 'ad' Then ' Ambulatoriale Diretto'
When 'ai' Then ' Ambulatoriale Indiretto'
When 'td' Then ' Telefonico Diretto'
When 'ti' Then ' Telefonico Indiretto'
When 'dd' Then ' Domiciliare Diretto'
When 'di' Then ' Domiciliare Indiretto'
When 'av' Then ' Accesso x Valutazione'
Else ' Non Specificato' End ) As tipo_contatto , Cast( Upper( tipo) As Char(6)) ,
Count(*) As totale , Cast( ' I trim 2014 ' As Char(18)) As periodo
FROM cart_visite
Where data_open Between '2014-01-01' And '2014-03-31'
Group By tipo
Order By tipo_contatto
e la seconda analitica :
Select Distinct Cast( p.cognome As Char(16)) , p.nome , p.nascita , p.sesso ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AD'
And v.data_open Between inizio And fine )
_amb_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AI'
And v.data_open Between inizio And fine )
_amb_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DD'
And v.data_open Between inizio And fine )
_domic_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DI'
And v.data_open Between inizio And fine )
_domic_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AV'
And v.data_open Between inizio And fine )
_acc_val_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TD'
And v.data_open Between inizio And fine )
_tel_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TI'
And v.data_open Between inizio And fine )
_tel_i_ ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And tipo Not In ( 'AD' , 'AI' , 'TD' , 'TI' , 'DD' , 'DI' , 'AV' )
And v.data_open Between inizio And fine )
_n_s_ , Cast( ' 'As Char(3)) As s ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And v.data_open Between inizio And fine )
_tot_acc_ ,
Cast( p.codice_fiscale As Char(24)) ,
Cast( '2014-01-01' As Char(16)) As inizio , Cast( '2014-03-31' As Char(16)) As fine , p.codice
FROM (( pazienti p Left Join nos_002 n On p.codice = n.codice )
Left Join v_utenti u On n.pa_medi = u.userid )
Left Join cart_visite v On p.codice = v.codice
Where u.codice_regionale Like '%' And u.nome Like '%'
And p.pa_convenzione = 'S'
And Year( nascita) Between 1900 And 2014
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or (n.pa_drevoca Between Today()-365 And Today() And motivo_revoca ='S' )) And p.decesso Is Null
And v.data_open Between inizio And fine And v.data_open Is Not Null
Group By p.cognome , p.nome , p.nascita , p.sesso , p.codice_fiscale , p.codice
Order By 1, 2
( spero funzioni ancora ) . Per interrogare il MillePS ( in caso di migrazione a PostgreSQL ) utilizzare :
Select Distinct Cast( p.cognome As Char(16)) , p.nome , p.nascita , p.sesso ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AD'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_amb_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AI'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_amb_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DD'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_domic_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DI'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_domic_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AV'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_acc_val_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TD'
And data_open Between '2014-01-01' And '2014-03-31' )
_tel_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TI'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_tel_i_ ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And tipo Not In ( 'AD' , 'AI' , 'TD' , 'TI' , 'DD' , 'DI' , 'AV' )
And v.data_open Between '2014-01-01' And '2014-03-31' )
_n_s_ , Cast( ' 'As Char(3)) As s ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And v.data_open Between '2014-01-01' And '2014-03-31' )
_tot_acc_ ,
Cast( p.codice_fiscale As Char(24)) ,
Cast( '2014-01-01' As Char(16)) As inizio , Cast( '2014-03-31' As Char(16)) As fine , p.codice
FROM (( pazienti p Left Join nos_002 n On p.codice = n.codice )
Left Join v_utenti u On n.pa_medi = u.userid )
Left Join cart_visite v On p.codice = v.codice
Where u.codice_regionale Like '%' And u.nome Like '%'
And p.pa_convenzione = 'S'
And Year( nascita) Between 1900 And 2014
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or (n.pa_drevoca Between Today()-365 And Today() And motivo_revoca ='S' )) And p.decesso Is Null
And v.data_open Between '2014-01-01' And '2014-03-31' And v.data_open Is Not Null
Group By p.cognome , p.nome , p.nascita , p.sesso , p.codice_fiscale , p.codice
Order By 1, 2
Ti saluto , Sergio
Cervino- Membro Junior
- Messaggi : 245
Punti : 5283
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: Query per tipo di contatto
Cervino ha scritto:Richiesta Non semplice con varie opzioni . Ho trovato ( e adattato ) 2 vecchie query al riguardo :
la prima x un riepilogo generale :
Select ( Case tipo
When 'ad' Then ' Ambulatoriale Diretto'
When 'ai' Then ' Ambulatoriale Indiretto'
When 'td' Then ' Telefonico Diretto'
When 'ti' Then ' Telefonico Indiretto'
When 'dd' Then ' Domiciliare Diretto'
When 'di' Then ' Domiciliare Indiretto'
When 'av' Then ' Accesso x Valutazione'
Else ' Non Specificato' End ) As tipo_contatto , Cast( Upper( tipo) As Char(6)) ,
Count(*) As totale , Cast( ' I trim 2014 ' As Char(18)) As periodo
FROM cart_visite
Where data_open Between '2014-01-01' And '2014-03-31'
Group By tipo
Order By tipo_contatto
e la seconda analitica :
Select Distinct Cast( p.cognome As Char(16)) , p.nome , p.nascita , p.sesso ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AD'
And v.data_open Between inizio And fine )
_amb_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AI'
And v.data_open Between inizio And fine )
_amb_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DD'
And v.data_open Between inizio And fine )
_domic_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DI'
And v.data_open Between inizio And fine )
_domic_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AV'
And v.data_open Between inizio And fine )
_acc_val_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TD'
And v.data_open Between inizio And fine )
_tel_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TI'
And v.data_open Between inizio And fine )
_tel_i_ ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And tipo Not In ( 'AD' , 'AI' , 'TD' , 'TI' , 'DD' , 'DI' , 'AV' )
And v.data_open Between inizio And fine )
_n_s_ , Cast( ' 'As Char(3)) As s ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And v.data_open Between inizio And fine )
_tot_acc_ ,
Cast( p.codice_fiscale As Char(24)) ,
Cast( '2014-01-01' As Char(16)) As inizio , Cast( '2014-03-31' As Char(16)) As fine , p.codice
FROM (( pazienti p Left Join nos_002 n On p.codice = n.codice )
Left Join v_utenti u On n.pa_medi = u.userid )
Left Join cart_visite v On p.codice = v.codice
Where u.codice_regionale Like '%' And u.nome Like '%'
And p.pa_convenzione = 'S'
And Year( nascita) Between 1900 And 2014
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or (n.pa_drevoca Between Today()-365 And Today() And motivo_revoca ='S' )) And p.decesso Is Null
And v.data_open Between inizio And fine And v.data_open Is Not Null
Group By p.cognome , p.nome , p.nascita , p.sesso , p.codice_fiscale , p.codice
Order By 1, 2
( spero funzioni ancora ) . Per interrogare il MillePS ( in caso di migrazione a PostgreSQL ) utilizzare :
Select Distinct Cast( p.cognome As Char(16)) , p.nome , p.nascita , p.sesso ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AD'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_amb_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AI'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_amb_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DD'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_domic_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DI'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_domic_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AV'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_acc_val_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TD'
And data_open Between '2014-01-01' And '2014-03-31' )
_tel_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TI'
And v.data_open Between '2014-01-01' And '2014-03-31' )
_tel_i_ ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And tipo Not In ( 'AD' , 'AI' , 'TD' , 'TI' , 'DD' , 'DI' , 'AV' )
And v.data_open Between '2014-01-01' And '2014-03-31' )
_n_s_ , Cast( ' 'As Char(3)) As s ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And v.data_open Between '2014-01-01' And '2014-03-31' )
_tot_acc_ ,
Cast( p.codice_fiscale As Char(24)) ,
Cast( '2014-01-01' As Char(16)) As inizio , Cast( '2014-03-31' As Char(16)) As fine , p.codice
FROM (( pazienti p Left Join nos_002 n On p.codice = n.codice )
Left Join v_utenti u On n.pa_medi = u.userid )
Left Join cart_visite v On p.codice = v.codice
Where u.codice_regionale Like '%' And u.nome Like '%'
And p.pa_convenzione = 'S'
And Year( nascita) Between 1900 And 2014
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or (n.pa_drevoca Between Today()-365 And Today() And motivo_revoca ='S' )) And p.decesso Is Null
And v.data_open Between '2014-01-01' And '2014-03-31' And v.data_open Is Not Null
Group By p.cognome , p.nome , p.nascita , p.sesso , p.codice_fiscale , p.codice
Order By 1, 2
Ti saluto , Sergio
Ottimo è proprio quello che mi serviva!!!
Che lusso....Grazie Sergio!!
francesco83go- Nuovo Membro
- Messaggi : 30
Punti : 4892
Voti per importanza dei messaggi : 13
Data d'iscrizione : 15.08.11
tipo contatto
SALVE SONO INTERESSATO ANCH'IO A QUESTA QUERY PURTROPPO QUELLA ANALITICA NON MI FUNZIONA E MI ERRORE SQL IN QUESTO PUNTO DELLA QUERY " FROM (( pazienti p Left Join nos_002 n " COME MAI? GRAZIE
nanci giacinto- Membro Junior
- Messaggi : 128
Punti : 5211
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11
Re: Query per tipo di contatto
nanci giacinto ha scritto:SALVE SONO INTERESSATO ANCH'IO A QUESTA QUERY PURTROPPO QUELLA ANALITICA NON MI FUNZIONA E MI ERRORE SQL IN QUESTO PUNTO DELLA QUERY " FROM (( pazienti p Left Join nos_002 n " COME MAI? GRAZIE
Prova così:
Select Distinct Cast( p.cognome As Char(16)) , p.nome , p.nascita , p.sesso ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AD'
And v.data_open Between inizio And fine )
_amb_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AI'
And v.data_open Between inizio And fine )
_amb_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DD'
And v.data_open Between inizio And fine )
_domic_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DI'
And v.data_open Between inizio And fine )
_domic_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AV'
And v.data_open Between inizio And fine )
_acc_val_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TD'
And v.data_open Between inizio And fine )
_tel_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TI'
And v.data_open Between inizio And fine )
_tel_i_ ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And tipo Not In ( 'AD' , 'AI' , 'TD' , 'TI' , 'DD' , 'DI' , 'AV' )
And v.data_open Between inizio And fine )
_n_s_ , Cast( ' 'As Char(3)) As s ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And v.data_open Between inizio And fine )
_tot_acc_ ,
Cast( p.codice_fiscale As Char(24)) ,
Cast( '2014-01-01' As Char(16)) As inizio , Cast( '2014-03-31' As Char(16)) As fine , p.codice
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 )
Left Outer Join cart_visite v On p.codice = v.codice
Where u.codice_regionale Like '%' And u.nome Like '%'
And p.pa_convenzione = 'S'
And Year( nascita) Between 1900 And 2014
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or (n.pa_drevoca Between Today()-365 And Today() And motivo_revoca ='S' )) And p.decesso Is Null
And v.data_open Between inizio And fine And v.data_open Is Not Null
Group By p.cognome , p.nome , p.nascita , p.sesso , p.codice_fiscale , p.codice
Order By 1, 2
tipo di contatto
Caro Admin la tua query funziona, ma mi estrae soltanto i contatti degli assistiti dei miei colleghi (siamo otto medici collegati in rete geografica con RRS Server) e nessun contatto dei miei pazienti. Ti chiedo anche, se hai la pazienza di spiegarlo, come mai la tua query funziona. Mi pare che la differenza è che hai usato "outer join" e non soltanto "join"? grazie
nanci giacinto- Membro Junior
- Messaggi : 128
Punti : 5211
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11
Re: Query per tipo di contatto
Nel linguaggio Sql il comando corretto è Left Outer Join.nanci giacinto ha scritto:Caro Admin la tua query funziona, ma mi estrae soltanto i contatti degli assistiti dei miei colleghi (siamo otto medici collegati in rete geografica con RRS Server) e nessun contatto dei miei pazienti. Ti chiedo anche, se hai la pazienza di spiegarlo, come mai la tua query funziona. Mi pare che la differenza è che hai usato "outer join" e non soltanto "join"? grazie
Per il resto sostituirei:
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 )
Left Outer Join cart_visite v On p.codice = v.codice
Where u.codice_regionale Like '%' And u.nome Like '%'
Con:
FROM pazienti p Left Outer Join nos_002 n On p.codice = n.codice
Left Outer Join cart_visite v On p.codice = v.codice
Where n.pa_medi Like '%' /* inserire prima di % le prime cifre del codice di medicina di gruppo */
In effetti quello del grande Cervino è un modo molto sofisticato di permettere, in caso di medicine di gruppo, di estrarre i dati del singolo medico usando o il codice regionale o il semplice nome del medico interessato. Però questo espone al rischio di errori in quanto, come già evidenziato in passato, non sempre i campi userid e pa_medi corrispondono. Per questo motivo preferisco considerare sempre pa_medi della tabella nos_002 che è sempre più preciso. Quindi la query diventa anche più scorrevole:
Select Distinct Cast( p.cognome As Char(16)) , p.nome , p.nascita , p.sesso ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AD'
And v.data_open Between inizio And fine )
_amb_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AI'
And v.data_open Between inizio And fine )
_amb_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DD'
And v.data_open Between inizio And fine )
_domic_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'DI'
And v.data_open Between inizio And fine )
_domic_i_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'AV'
And v.data_open Between inizio And fine )
_acc_val_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TD'
And v.data_open Between inizio And fine )
_tel_d_ ,
(Select Count (*) From cart_visite v Where p.codice = v.codice And tipo Like 'TI'
And v.data_open Between inizio And fine )
_tel_i_ ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And tipo Not In ( 'AD' , 'AI' , 'TD' , 'TI' , 'DD' , 'DI' , 'AV' )
And v.data_open Between inizio And fine )
_n_s_ , Cast( ' 'As Char(3)) As s ,
(Select Count (*) As totale From cart_visite v Where p.codice = v.codice
And v.data_open Between inizio And fine )
_tot_acc_ ,
Cast( p.codice_fiscale As Char(24)) ,
Cast( '2014-01-01' As Char(16)) As inizio , Cast( '2014-03-31' As Char(16)) As fine , p.codice
FROM pazienti p Left Outer Join nos_002 n On p.codice = n.codice
Left Outer Join cart_visite v On p.codice = v.codice
Where n.pa_medi Like '%' /* inserire prima di % le prime cifre del codice di medicina di gruppo */
And p.pa_convenzione = 'S'
And Year( nascita) Between 1900 And 2014
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or (n.pa_drevoca Between Today()-365 And Today() And motivo_revoca ='S' )) And p.decesso Is Null
And v.data_open Between inizio And fine And v.data_open Is Not Null
Group By p.cognome , p.nome , p.nascita , p.sesso , p.codice_fiscale , p.codice
Order By 1, 2
tipo contatti
OK adesso funziona alla perfezione grazie
nanci giacinto- Membro Junior
- Messaggi : 128
Punti : 5211
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11
Re: Query per tipo di contatto
Il problema di estrarre i pazienti da un Mille.db MultiUtente e di dimensioni ragguardevoli, come nel caso di Nancy, senza dover inserire nella query un codice quantomeno difficile da ricordare, era già stato ampiamente affrontato sul vecchio forum : la soluzione escogitata sembrava funzionare ma evidentemente non in tutti i casi ; purtroppo il Mille.db che uso x le estrazione è MonoUtente e quindi posso fare solo congetture ma non prove valide al riguardo .
Comunque è alquanto singolare che l' estrazione restituisca i pazienti di tutti gli altri Utenti ma non quelli del Medico presente nella vista V_Users ( allora si asseriva che le tabelle delle Viste erano MonoUtenti o ricordo male ? ) .
Nel mio mille.db il codice Utente è presente nei campi : p.userid ( ma a sorpresa , non è univoco : dato inspiegabile ma già noto ) - n.pa_medi - u.userid ( vista in quanto la tabella Users non è accessibile da MilleUtilità ; purtroppo la commistione di Tabelle e Viste tende a creare problemi in un database complesso, nonostante l' utilizzo di una Vista molto piccola ( ma non è un novità ) ; tuttavia i campi n.pa_medi - u.userid sono sempre perfattemente allineati fra loro , a differenza di p.userid .
Se Nancy potesse fare alcune prove con una query del tipo :
Select Distinct Cast( p.cognome As Char(16)) , p.nome , p.nascita , p.sesso , n.pa_drevoca , n.motivo_revoca , Cast( n.pa_medi As Char(12)) , Cast( n.userid As Char(12)) , Cast( u.userid As Char(12)) , u.codice_regionale , u.nome , p.data_open , p.data_upd , p.time_last
FROM ( v_utenti u Left Outer Join nos_002 n On u.userid = n.pa_medi )
Left Outer Join pazienti p On p.codice = n.codice
Where u.codice_regionale Like '%' And u.nome Like '%'
And p.pa_convenzione = 'S'
And Year( p.nascita) Between 1900 And 2014
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or (n.pa_drevoca Between Today()-365 And Today() And motivo_revoca ='S' )) And p.decesso Is Null
Group By p.cognome , p.nome , p.nascita , p.sesso , p.codice_fiscale , p.codice , n.pa_drevoca , n.motivo_revoca , n.pa_medi , n.userid , u.userid , u.codice_regionale , u.nome , p.data_open , p.data_upd , p.time_last
Order By 8 , 7 , 9 , 1, 2
prima senza e poi con il Nome Utente con cui accede a Millewin in ( u.nome Like '%' ) e poi con il proprio Codice Regionale in ( u.codice_regionale '%' ) con e senza il proprio Nome Utente e riferire , forse qualche passo in avanti ... si potrebbe fare .
Grazie , comunque .
Ringrazio anche Giuseppe x l' implementazione della query x il Tipo di Contatto : in Left Outer Join ed in Right Outer Join , il termine Outer è pleonastico : di conseguenza in PostGreSQL viene concessa la possibilità di rimuoverlo a differenza di SQL Anywhere .
Saluti , Sergio
Comunque è alquanto singolare che l' estrazione restituisca i pazienti di tutti gli altri Utenti ma non quelli del Medico presente nella vista V_Users ( allora si asseriva che le tabelle delle Viste erano MonoUtenti o ricordo male ? ) .
Nel mio mille.db il codice Utente è presente nei campi : p.userid ( ma a sorpresa , non è univoco : dato inspiegabile ma già noto ) - n.pa_medi - u.userid ( vista in quanto la tabella Users non è accessibile da MilleUtilità ; purtroppo la commistione di Tabelle e Viste tende a creare problemi in un database complesso, nonostante l' utilizzo di una Vista molto piccola ( ma non è un novità ) ; tuttavia i campi n.pa_medi - u.userid sono sempre perfattemente allineati fra loro , a differenza di p.userid .
Se Nancy potesse fare alcune prove con una query del tipo :
Select Distinct Cast( p.cognome As Char(16)) , p.nome , p.nascita , p.sesso , n.pa_drevoca , n.motivo_revoca , Cast( n.pa_medi As Char(12)) , Cast( n.userid As Char(12)) , Cast( u.userid As Char(12)) , u.codice_regionale , u.nome , p.data_open , p.data_upd , p.time_last
FROM ( v_utenti u Left Outer Join nos_002 n On u.userid = n.pa_medi )
Left Outer Join pazienti p On p.codice = n.codice
Where u.codice_regionale Like '%' And u.nome Like '%'
And p.pa_convenzione = 'S'
And Year( p.nascita) Between 1900 And 2014
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or (n.pa_drevoca Between Today()-365 And Today() And motivo_revoca ='S' )) And p.decesso Is Null
Group By p.cognome , p.nome , p.nascita , p.sesso , p.codice_fiscale , p.codice , n.pa_drevoca , n.motivo_revoca , n.pa_medi , n.userid , u.userid , u.codice_regionale , u.nome , p.data_open , p.data_upd , p.time_last
Order By 8 , 7 , 9 , 1, 2
prima senza e poi con il Nome Utente con cui accede a Millewin in ( u.nome Like '%' ) e poi con il proprio Codice Regionale in ( u.codice_regionale '%' ) con e senza il proprio Nome Utente e riferire , forse qualche passo in avanti ... si potrebbe fare .
Grazie , comunque .
Ringrazio anche Giuseppe x l' implementazione della query x il Tipo di Contatto : in Left Outer Join ed in Right Outer Join , il termine Outer è pleonastico : di conseguenza in PostGreSQL viene concessa la possibilità di rimuoverlo a differenza di SQL Anywhere .
Saluti , Sergio
Cervino- Membro Junior
- Messaggi : 245
Punti : 5283
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
tipo contatti
Caro cervino grazie per l'intervento, esiti delle prove: 1) query tal quale risultato 10 righe di assistiti non miei, 2) con pw millewin righe zero, 3) con codice regionale righe zero, 4) con pw millewin e codice regionale righe zero.
Sarà pleonastico ma senza outer la query non funziona con aouter la query funziona. grazie
Sarà pleonastico ma senza outer la query non funziona con aouter la query funziona. grazie
nanci giacinto- Membro Junior
- Messaggi : 128
Punti : 5211
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11
Re: Query per tipo di contatto
nanci giacinto ha scritto:Caro cervino grazie per l'intervento, esiti delle prove: 1) query tal quale risultato 10 righe di assistiti non miei, 2) con pw millewin righe zero, 3) con codice regionale righe zero, 4) con pw millewin e codice regionale righe zero.
Sarà pleonastico ma senza outer la query non funziona con outer la query funziona. grazie
Grazie Nancy x le prove ma il risultato è inequivocabile e senza appello : 10 righe restituite su un database di oltre 20000 pazienti ( anche se nelle query 2 e 4 bisognava utilizzare il Nome Utente e non la Password; comunque irrilevanti i test 2, 3 e 4; alcune curiosità : Tempo di estrazione delle query ? , i 10 pazienti estratti sono attribuiti ad un Medico ? ) .
Evidentemente nei Mille.db MultiUtente, il Link fra Tabelle e Vista v_users non funziona correttamente ( per motivi ? da definire, chiedere eventualmente informazioni all' HelpDesk ), la tabella Users è blindata in MU ; altre eventuali soluzioni restano auspicabili ; peccato la query con il link fra Tabelle e vista v_users funziona con Tempi di estrazione molto rapidi sui Mille.db MonoUtente ove è superflua !!!
Saluti , Sergio
Cervino- Membro Junior
- Messaggi : 245
Punti : 5283
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Argomenti simili
» help query
» ELENCO DI TUTTI I DIABETICI DI TIPO I e II
» Inserimento campo calcolato "orario" in un certificato?
» query con le viste
» query diario
» ELENCO DI TUTTI I DIABETICI DI TIPO I e II
» Inserimento campo calcolato "orario" in un certificato?
» query con le viste
» query diario
Pagina 1 di 1
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.