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

Query per tipo di contatto

Andare in basso

Query per tipo di contatto

Messaggio  francesco83go il Gio 20 Mar 2014 - 22:49

Ciao a tutti  geek 
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
avatar
francesco83go
Nuovo Membro
Nuovo Membro

Messaggi : 29
Punti : 2661
Voti per importanza dei messaggi : 13
Data d'iscrizione : 15.08.11

Visualizza il profilo

Torna in alto Andare in basso

Re: Query per tipo di contatto

Messaggio  Cervino il Sab 22 Mar 2014 - 1:50

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

Cervino
Membro Junior
Membro Junior

Messaggi : 221
Punti : 3023
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: Query per tipo di contatto

Messaggio  francesco83go il Sab 22 Mar 2014 - 13:27

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!!  cheers  cheers
avatar
francesco83go
Nuovo Membro
Nuovo Membro

Messaggi : 29
Punti : 2661
Voti per importanza dei messaggi : 13
Data d'iscrizione : 15.08.11

Visualizza il profilo

Torna in alto Andare in basso

tipo contatto

Messaggio  nanci giacinto il Dom 6 Apr 2014 - 11:48

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 
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2977
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo

Torna in alto Andare in basso

Re: Query per tipo di contatto

Messaggio  Admin il Dom 6 Apr 2014 - 23:56

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

_________________
L'Amministratore
Giuseppe Blasio
avatar
Admin
Admin
Admin

Messaggi : 521
Punti : 3444
Voti per importanza dei messaggi : 85
Data d'iscrizione : 20.02.11
Località : CASERTA

Visualizza il profilo http://utentimillewin.forumattivo.it

Torna in alto Andare in basso

tipo di contatto

Messaggio  nanci giacinto il Mar 8 Apr 2014 - 22:19

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
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2977
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo

Torna in alto Andare in basso

Re: Query per tipo di contatto

Messaggio  Admin il Mer 9 Apr 2014 - 13:05

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
Nel linguaggio Sql il comando corretto è Left Outer Join.
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

_________________
L'Amministratore
Giuseppe Blasio
avatar
Admin
Admin
Admin

Messaggi : 521
Punti : 3444
Voti per importanza dei messaggi : 85
Data d'iscrizione : 20.02.11
Località : CASERTA

Visualizza il profilo http://utentimillewin.forumattivo.it

Torna in alto Andare in basso

tipo contatti

Messaggio  nanci giacinto il Gio 10 Apr 2014 - 19:37

OK adesso funziona alla perfezione grazie
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2977
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo

Torna in alto Andare in basso

Re: Query per tipo di contatto

Messaggio  Cervino il Sab 12 Apr 2014 - 23:39

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


Cervino
Membro Junior
Membro Junior

Messaggi : 221
Punti : 3023
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

tipo contatti

Messaggio  nanci giacinto il Dom 13 Apr 2014 - 22:41

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
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2977
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo

Torna in alto Andare in basso

Re: Query per tipo di contatto

Messaggio  Cervino il Mer 16 Apr 2014 - 0:24

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
Membro Junior

Messaggi : 221
Punti : 3023
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: Query per tipo di contatto

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