Query complessa
+2
LucaLeF
drtulino
6 partecipanti
Pagina 1 di 3
Pagina 1 di 3 • 1, 2, 3
Query complessa
Avrei bisogno di fare un'estrazione a molti Colleghi dell'ASL per poter poi fare degli Audit per Equipe. Vi allego le richieste. Capisco la complessità dell'estrazione, ma mi accontenterei anche di poter ottenere il risultato con qualche query se non si dovesse riuscire con una sola.
Ringrazio anticipatamente quanti vorranno darmi una mano.
Ringrazio anticipatamente quanti vorranno darmi una mano.
- File allegati
Re: Query complessa
Mi rassegno a fare tante query o attendo che qualche anima pia mi dica se aspettarmi o meno qualche miracolo?
Re: Query complessa
non ti illudere. questa mail ti esprime solo solidarietà
Luca Le Foche
ps.: e ti suggerisce, se ti è possibile, di verificare se ti succede quello descritto in "colite asmatica"
Luca Le Foche
ps.: e ti suggerisce, se ti è possibile, di verificare se ti succede quello descritto in "colite asmatica"
LucaLeF- Membro Esperto
- Messaggi : 473
Punti : 5922
Voti per importanza dei messaggi : 11
Data d'iscrizione : 21.02.11
Re: Query complessa
LucaLeF ha scritto:non ti illudere. questa mail ti esprime solo solidarietà
Luca Le Foche
ps.: e ti suggerisce, se ti è possibile, di verificare se ti succede quello descritto in "colite asmatica"
Caro Luca, non Ti nascondo che non appena avevo visto una risposta mi ero illuso.
Ho controllato, comunque, l'applicazione della query "colite asmatica", ma Ti devo dire che a me estrae SOLO gli asmatici e niente colitici.
Re: Query complessa
drtulino ha scritto:Avrei bisogno di fare un'estrazione a molti Colleghi dell'ASL per poter poi fare degli Audit per Equipe. Vi allego le richieste. Capisco la complessità dell'estrazione, ma mi accontenterei anche di poter ottenere il risultato con qualche query se non si dovesse riuscire con una sola.
Ringrazio anticipatamente quanti vorranno darmi una mano.
Caro Renato, non mi è ben chiaro il tipo di tabella che vuoi ottenere, nominativa, riassuntiva ecc. Poi non è chiaro se per diabete > 16 anni intendi diabete presente da oltre 16 anni o diabetici con più di 16 anni.
In ogni caso si tratta di elementi molto eterogenei per cui credo che sia impossibile estrarre tutto con una sola query. Provo solo a fare un tentativo molto grezzo per definire meglio le caratteristiche dell'estrazione e quindi dare un input per i "cultori" del SQL.
Per quanto riguarda il BMI + altro, prova la seguente:
Select distinct p.cognome, p.nome, n.pa_ind+' '+n.domi_civico+' '+n.pa_cit as indirizzo, p.nascita, CAST(Years(p.nascita, Today()) As CHAR (4)) eta,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where a.codice=p.codice and a.ac_code like '1935' and a.data_open = _Data_BMI_) _Altezza_,
(select Cast(a.ac_val+0 as dec(4,1)) from cart_accert a where a.codice=p.codice and a.ac_code like '1946' and a.data_open = _Data_BMI_) _Peso_,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where a.codice=p.codice and a.ac_code like '2609' and a.data_open = _Data_BMI_) _BMI_, ' ',
(Select Max(a.data_open) From cart_accert a Where (a.codice = p.codice And a.ac_code Like '2609' And ac_val Is Not Null) And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' 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)) _Data_BMI_,
(select MAX(a.ac_val) from cart_accert a where ( a.codice=p.codice and a.ac_code Like '2835' and a.ac_val is not null ) and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '2835' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Attivita_Fisica_,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where ( a.codice=p.codice and a.ac_code Like '3560' and a.ac_val is not null ) and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '3560' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Circonferenza_Vita_,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where ( a.codice=p.codice and a.ac_code Like '2904' and a.ac_val is not null ) and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '2904' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Consumo_Alcool_,
(Select
CAST((case a.ac_val
WHEN 'O' THEN 'fumatore occasionale'
WHEN 'V' THEN 'fumatore passivo'
WHEN '1' THEN 'meno di 10 sigarette al giorno'
WHEN '2' THEN 'tra 10 e 20 sigarette al giorno'
WHEN '3' THEN 'oltre 20 sigarette al giorno'
WHEN 'X' THEN 'mai fumato e mai fumerà'
WHEN 'N' THEN 'mai fumato'
WHEN 'E' THEN 'ex fumatore da oltre 1 anno'
WHEN 'M' THEN 'ex fumatore'
WHEN 'F' THEN 'ex forte fumatore da oltre 10 anni'
WHEN 'Z' THEN 'ex forte fumatore da oltre 1 anno'
WHEN 'U' THEN 'ex forte fumatore'
WHEN 'P' THEN 'fumatore di pipa'
WHEN 'S' THEN 'fumatore di sigaro'
ELSE 'Non_Registrato' END) as char(31)) Tipo_fumatore
FROM cart_accert a
WHERE a.codice=p.codice AND a.ac_code like '2832' and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '2832' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Fumo_,
(Select a.p_max From cart_press a Where (a.codice = p.codice And a.p_max is Not Null) And Not Exists (Select b.codice From cart_press b Where a.codice = b.codice And (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.p_max Is Not Null) ) AS pas,
(Select a.p_min From cart_press a Where (a.codice = p.codice And a.p_min is Not Null) And Not Exists (Select b.codice From cart_press b Where a.codice = b.codice And (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.p_min Is Not Null) ) AS pad,
(Select a.ac_val From cart_accert a Where a.ac_Nt_Code like '90.14.3' AND a.codice=p.codice 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_Nt_Code like '90.14.3' 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)) _Colesterolo_,
(Select a.ac_val From cart_accert a Where a.ac_Nt_Code like '90.14.1' AND a.codice=p.codice 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_Nt_Code like '90.14.1' 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)) _Colesterolo_HDL_,
(Select a.ac_val From cart_accert a Where a.ac_Nt_Code like '90.14.2' AND a.codice=p.codice 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_Nt_Code like '90.14.2' 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)) _Colesterolo_LDL_,
(Select a.ac_val From cart_accert a Where a.ac_Nt_Code like '90.43.2' AND a.codice=p.codice 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_Nt_Code like '90.43.2' 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)) _Trigliceridi_,
(Select a.ac_val From cart_accert a Where a.ac_Nt_Code like '90.27.1' AND a.codice=p.codice 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_Nt_Code like '90.27.1' 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)) _Glicemia_
FROM PAZIENTI p, NOS_002 n
WHERE p.codice=n.codice
AND _bmi_ is not null
AND (n.pa_drevoca IS NULL or n.pa_drevoca >TODAY()) AND (p.decesso IS NULL)
AND p.pa_convenzione='S'
AND n.pa_medi like '%'
AND _Data_BMI_ BETWEEN '2011/01/01' AND '2011/12/31'
order by 1,2
Per le terapie dei diabetici:
Select Distinct p.cognome, p.nome, p.nascita, Years(p.nascita, Today()) eta, p.sesso, b.pr_descr Problema, b.data_open Inizio_Problema, t.co_Des Farmaco, t.te_Npezzi N_Pezzi, t.data_open Data_prescr, t.co_Atc ATC
FROM pazienti p , nos_002 n, cart_problemi b, cart_terap t
Where p.codice = n.codice And b.codice = p.codice AND p.codice=t.codice
AND b.cp_code like '250%'
AND b.data_open > (Today() - 5840)
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today())
AND (t.co_ATC LIKE 'B01AC06' OR t.co_ATC LIKE 'C10AA%' OR t.co_ATC LIKE 'C09%')
AND t.data_open BETWEEN '2011/01/01' AND '2011/12/31'
ORDER BY t.co_Atc
Per gli esami dei diabetici:
Select Distinct p.cognome, p.nome, p.nascita, Years(p.nascita, Today()) eta, p.sesso, b.pr_descr Problema, b.data_open Inizio_Problema, a.ac_Des, a.data_open Data_prescr
FROM pazienti p , nos_002 n, cart_problemi b, cart_accert a
Where p.codice = n.codice And b.codice = p.codice AND p.codice=a.codice
AND b.pr_descr like 'diabete%'
AND b.data_open < (Today() - 5840)
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today())
AND a.Ac_Nt_Code IN ('90.16.4' , '90.16.3' ,'90.28.1','90.33.4', '90.14.3', '90.14.1' , '90.43.2')
AND a.data_open BETWEEN '2011/01/01' AND '2011/12/31'
ORDER BY 8,1,2,9
Per la spirometria nella BPCO:
Select Distinct p.cognome, p.nome, p.nascita, Years(p.nascita, Today()) eta, p.sesso, b.pr_descr Problema, b.data_open Inizio_Problema, a.ac_Des, a.data_open Data_prescr
FROM pazienti p , nos_002 n, cart_problemi b, cart_accert a
Where p.codice = n.codice And b.codice = p.codice AND p.codice=a.codice
AND b.pr_descr like '%BPCO%%'
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today())
AND (a.Ac_Nt_Code LIKE '89.37.1 ' OR a.Ac_Nt_Code LIKE '89.37.2')
AND a.data_open BETWEEN '2011/01/01' AND '2011/12/31'
ORDER BY 8,1,2,9
Per l'uso dei broncodilatatori:
Select Distinct p.cognome, p.nome, p.nascita, Years(p.nascita, Today()) eta, p.sesso, b.pr_descr Problema, b.data_open Inizio_Problema, t.co_Des Farmaco, t.te_Npezzi N_Pezzi, t.data_open Data_prescr, t.co_Atc ATC
FROM pazienti p , nos_002 n, cart_problemi b, cart_terap t
Where p.codice = n.codice And b.codice = p.codice AND p.codice=t.codice
AND b.pr_descr like '%BPCO%'
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today())
AND (t.co_ATC LIKE 'R03AC%' OR t.co_ATC LIKE 'R03AK%')
AND t.data_open BETWEEN '2011/01/01' AND '2011/12/31'
ORDER BY 8,1,2,9
Come anticipato sono solo delle bozze, non trattarmi male
Re: Query complessa
Caro Giuseppe, intanto Ti ringrazio e domani le provo. Per precisione confermo che quello che mi serve è un dato riassuntivo e la ricerca deve essere fatta per i diabetici di età superiore a 16 anni.
Re: Query complessa
Admin ha scritto:
Select distinct p.cognome, p.nome, n.pa_ind+' '+n.domi_civico+' '+n.pa_cit as indirizzo, p.nascita, CAST(Years(p.nascita, Today()) As CHAR (4)) eta,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where a.codice=p.codice and a.ac_code like '1935' and a.data_open = _Data_BMI_) _Altezza_,
(select Cast(a.ac_val+0 as dec(4,1)) from cart_accert a where a.codice=p.codice and a.ac_code like '1946' and a.data_open = _Data_BMI_) _Peso_,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where a.codice=p.codice and a.ac_code like '2609' and a.data_open = _Data_BMI_) _BMI_, ' ',
(Select Max(a.data_open) From cart_accert a Where (a.codice = p.codice And a.ac_code Like '2609' And ac_val Is Not Null) And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' 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)) _Data_BMI_,
(select MAX(a.ac_val) from cart_accert a where ( a.codice=p.codice and a.ac_code Like '2835' and a.ac_val is not null ) and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '2835' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Attivita_Fisica_,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where ( a.codice=p.codice and a.ac_code Like '3560' and a.ac_val is not null ) and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '3560' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Circonferenza_Vita_,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where ( a.codice=p.codice and a.ac_code Like '2904' and a.ac_val is not null ) and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '2904' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Consumo_Alcool_,
(Select
CAST((case a.ac_val
WHEN 'O' THEN 'fumatore occasionale'
WHEN 'V' THEN 'fumatore passivo'
WHEN '1' THEN 'meno di 10 sigarette al giorno'
WHEN '2' THEN 'tra 10 e 20 sigarette al giorno'
WHEN '3' THEN 'oltre 20 sigarette al giorno'
WHEN 'X' THEN 'mai fumato e mai fumerà'
WHEN 'N' THEN 'mai fumato'
WHEN 'E' THEN 'ex fumatore da oltre 1 anno'
WHEN 'M' THEN 'ex fumatore'
WHEN 'F' THEN 'ex forte fumatore da oltre 10 anni'
WHEN 'Z' THEN 'ex forte fumatore da oltre 1 anno'
WHEN 'U' THEN 'ex forte fumatore'
WHEN 'P' THEN 'fumatore di pipa'
WHEN 'S' THEN 'fumatore di sigaro'
ELSE 'Non_Registrato' END) as char(31)) Tipo_fumatore
FROM cart_accert a
WHERE a.codice=p.codice AND a.ac_code like '2832' and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '2832' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Fumo_,
(Select a.p_max From cart_press a Where (a.codice = p.codice And a.p_max is Not Null) And Not Exists (Select b.codice From cart_press b Where a.codice = b.codice And (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.p_max Is Not Null) ) AS pas,
(Select a.p_min From cart_press a Where (a.codice = p.codice And a.p_min is Not Null) And Not Exists (Select b.codice From cart_press b Where a.codice = b.codice And (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.p_min Is Not Null) ) AS pad,
(Select a.ac_val From cart_accert a Where a.ac_Nt_Code like '90.14.3' AND a.codice=p.codice 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_Nt_Code like '90.14.3' 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)) _Colesterolo_,
(Select a.ac_val From cart_accert a Where a.ac_Nt_Code like '90.14.1' AND a.codice=p.codice 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_Nt_Code like '90.14.1' 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)) _Colesterolo_HDL_,
(Select a.ac_val From cart_accert a Where a.ac_Nt_Code like '90.14.2' AND a.codice=p.codice 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_Nt_Code like '90.14.2' 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)) _Colesterolo_LDL_,
(Select a.ac_val From cart_accert a Where a.ac_Nt_Code like '90.43.2' AND a.codice=p.codice 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_Nt_Code like '90.43.2' 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)) _Trigliceridi_,
(Select a.ac_val From cart_accert a Where a.ac_Nt_Code like '90.27.1' AND a.codice=p.codice 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_Nt_Code like '90.27.1' 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)) _Glicemia_
FROM PAZIENTI p, NOS_002 n
WHERE p.codice=n.codice
AND _bmi_ is not null
AND (n.pa_drevoca IS NULL or n.pa_drevoca >TODAY()) AND (p.decesso IS NULL)
AND p.pa_convenzione='S'
AND n.pa_medi like '%'
AND _Data_BMI_ BETWEEN '2011/01/01' AND '2011/12/31'
order by 1,2
Per quanto riguarda l'estrazione di questa query mi da ZERO. in essa non mi servono i dati riguardanti gli accertamenti (colesterolo, trigliceridi, hdl e glicemia), ho provato a levarli e mi da errore. Anche la query che estrae gli accertamenti del diabete mi da ZERO, ma penso sia un problema di codici che ora controllo. Ho messo al posto di '%' il codice di gruppo. Bene per le altre.
Re: Query complessa
Admin ha scritto:
Per gli esami dei diabetici:
Select Distinct p.cognome, p.nome, p.nascita, Years(p.nascita, Today()) eta, p.sesso, b.pr_descr Problema, b.data_open Inizio_Problema, a.ac_Des, a.data_open Data_prescr
FROM pazienti p , nos_002 n, cart_problemi b, cart_accert a
Where p.codice = n.codice And b.codice = p.codice AND p.codice=a.codice
AND b.pr_descr like 'diabete%'
AND b.data_open < (Today() - 5840)
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today())
AND a.Ac_Nt_Code IN ('90.16.4' , '90.16.3' ,'90.28.1','90.33.4', '90.14.3', '90.14.1' , '90.43.2')
AND a.data_open BETWEEN '2011/01/01' AND '2011/12/31'
ORDER BY 8,1,2,9
Per quanto riguarda questa query, ho controllato i codici degli accertamenti e sono esatti, ma l'estrazione mi da sempre ZERO. Ho inserito anche la stringa AND n.pa_medi like '%' per il codice del gruppo che ho inserito al posto di %.
Re: Query complessa
Admin ha scritto:
Per gli esami dei diabetici:
Select Distinct p.cognome, p.nome, p.nascita, Years(p.nascita, Today()) eta, p.sesso, b.pr_descr Problema, b.data_open Inizio_Problema, a.ac_Des, a.data_open Data_prescr
FROM pazienti p , nos_002 n, cart_problemi b, cart_accert a
Where p.codice = n.codice And b.codice = p.codice AND p.codice=a.codice
AND b.pr_descr like 'diabete%'
AND b.data_open < (Today() - 5840)
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today())
AND a.Ac_Nt_Code IN ('90.16.4' , '90.16.3' ,'90.28.1','90.33.4', '90.14.3', '90.14.1' , '90.43.2')
AND a.data_open BETWEEN '2011/01/01' AND '2011/12/31'
ORDER BY 8,1,2,9
Per quanto riguarda questa query, ho controllato i codici degli accertamenti e sono esatti, ma l'estrazione mi da sempre ZERO. Ho inserito anche la stringa AND n.pa_medi like '%' per il codice del gruppo che ho inserito al posto di %.
Ho scoperto che il problema sta nel 5840. A che data fa riferimento?
Re: Query complessa
drtulino ha scritto:Admin ha scritto:
Per gli esami dei diabetici:
Select Distinct p.cognome, p.nome, p.nascita, Years(p.nascita, Today()) eta, p.sesso, b.pr_descr Problema, b.data_open Inizio_Problema, a.ac_Des, a.data_open Data_prescr
FROM pazienti p , nos_002 n, cart_problemi b, cart_accert a
Where p.codice = n.codice And b.codice = p.codice AND p.codice=a.codice
AND b.pr_descr like 'diabete%'
AND b.data_open < (Today() - 5840)
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today())
AND a.Ac_Nt_Code IN ('90.16.4' , '90.16.3' ,'90.28.1','90.33.4', '90.14.3', '90.14.1' , '90.43.2')
AND a.data_open BETWEEN '2011/01/01' AND '2011/12/31'
ORDER BY 8,1,2,9
Per quanto riguarda questa query, ho controllato i codici degli accertamenti e sono esatti, ma l'estrazione mi da sempre ZERO. Ho inserito anche la stringa AND n.pa_medi like '%' per il codice del gruppo che ho inserito al posto di %.
Ho scoperto che il problema sta nel 5840. A che data fa riferimento?
Infatti bisogna sostituire
AND b.data_open < (Today() - 5840) con
AND eta>16
Quella clausola infatti serviva ad indicare i diabetici da oltre 16 anni.
Riguardo al BMI :
Select distinct p.cognome, p.nome, n.pa_ind+' '+n.domi_civico+' '+n.pa_cit as indirizzo, p.nascita, CAST(Years(p.nascita, Today()) As CHAR (4)) eta,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where a.codice=p.codice and a.ac_code like '1935' and a.data_open = _Data_BMI_) _Altezza_,
(select Cast(a.ac_val+0 as dec(4,1)) from cart_accert a where a.codice=p.codice and a.ac_code like '1946' and a.data_open = _Data_BMI_) _Peso_,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where a.codice=p.codice and a.ac_code like '2609' and a.data_open = _Data_BMI_) _BMI_, ' ',
(Select Max(a.data_open) From cart_accert a Where (a.codice = p.codice And a.ac_code Like '2609' And ac_val Is Not Null) And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' 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)) _Data_BMI_,
(select MAX(a.ac_val) from cart_accert a where ( a.codice=p.codice and a.ac_code Like '2835' and a.ac_val is not null ) and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '2835' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Attivita_Fisica_,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where ( a.codice=p.codice and a.ac_code Like '3560' and a.ac_val is not null ) and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '3560' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Circonferenza_Vita_,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where ( a.codice=p.codice and a.ac_code Like '2904' and a.ac_val is not null ) and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '2904' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Consumo_Alcool_,
(Select
CAST((case a.ac_val
WHEN 'O' THEN 'fumatore occasionale'
WHEN 'V' THEN 'fumatore passivo'
WHEN '1' THEN 'meno di 10 sigarette al giorno'
WHEN '2' THEN 'tra 10 e 20 sigarette al giorno'
WHEN '3' THEN 'oltre 20 sigarette al giorno'
WHEN 'X' THEN 'mai fumato e mai fumerà'
WHEN 'N' THEN 'mai fumato'
WHEN 'E' THEN 'ex fumatore da oltre 1 anno'
WHEN 'M' THEN 'ex fumatore'
WHEN 'F' THEN 'ex forte fumatore da oltre 10 anni'
WHEN 'Z' THEN 'ex forte fumatore da oltre 1 anno'
WHEN 'U' THEN 'ex forte fumatore'
WHEN 'P' THEN 'fumatore di pipa'
WHEN 'S' THEN 'fumatore di sigaro'
ELSE 'Non_Registrato' END) as char(31)) Tipo_fumatore
FROM cart_accert a
WHERE a.codice=p.codice AND a.ac_code like '2832' and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '2832' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Fumo_
FROM PAZIENTI p, NOS_002 n
WHERE p.codice=n.codice
AND _bmi_ is not null
AND (n.pa_drevoca IS NULL or n.pa_drevoca >TODAY()) AND (p.decesso IS NULL)
AND p.pa_convenzione='S'
AND n.pa_medi like '%'
AND _Data_BMI_ BETWEEN '2011/01/01' AND '2011/12/31'
order by 1,2
Naturalmente estrae dati se sono stati inseriti e fa riferimento all'anno 2011 come indicato. Prova ad estendere la ricerca mettendo come periodo da esaminare:
AND _Data_BMI_ BETWEEN '2000/01/01' AND '2011/12/31'
Re: Query complessa
Admin ha scritto:
Infatti bisogna sostituire
AND b.data_open < (Today() - 5840) con
AND eta>16
Questo problema, infatti, lo avevo risolto.
Admin ha scritto:
Quella clausola infatti serviva ad indicare i diabetici da oltre 16 anni.
Riguardo al BMI :
Select distinct p.cognome, p.nome, n.pa_ind+' '+n.domi_civico+' '+n.pa_cit as indirizzo, p.nascita, CAST(Years(p.nascita, Today()) As CHAR (4)) eta,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where a.codice=p.codice and a.ac_code like '1935' and a.data_open = _Data_BMI_) _Altezza_,
(select Cast(a.ac_val+0 as dec(4,1)) from cart_accert a where a.codice=p.codice and a.ac_code like '1946' and a.data_open = _Data_BMI_) _Peso_,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where a.codice=p.codice and a.ac_code like '2609' and a.data_open = _Data_BMI_) _BMI_, ' ',
(Select Max(a.data_open) From cart_accert a Where (a.codice = p.codice And a.ac_code Like '2609' And ac_val Is Not Null) And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' 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)) _Data_BMI_,
(select MAX(a.ac_val) from cart_accert a where ( a.codice=p.codice and a.ac_code Like '2835' and a.ac_val is not null ) and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '2835' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Attivita_Fisica_,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where ( a.codice=p.codice and a.ac_code Like '3560' and a.ac_val is not null ) and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '3560' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Circonferenza_Vita_,
(select cast(a.ac_val+0 as dec(4,1)) from cart_accert a where ( a.codice=p.codice and a.ac_code Like '2904' and a.ac_val is not null ) and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '2904' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Consumo_Alcool_,
(Select
CAST((case a.ac_val
WHEN 'O' THEN 'fumatore occasionale'
WHEN 'V' THEN 'fumatore passivo'
WHEN '1' THEN 'meno di 10 sigarette al giorno'
WHEN '2' THEN 'tra 10 e 20 sigarette al giorno'
WHEN '3' THEN 'oltre 20 sigarette al giorno'
WHEN 'X' THEN 'mai fumato e mai fumerà'
WHEN 'N' THEN 'mai fumato'
WHEN 'E' THEN 'ex fumatore da oltre 1 anno'
WHEN 'M' THEN 'ex fumatore'
WHEN 'F' THEN 'ex forte fumatore da oltre 10 anni'
WHEN 'Z' THEN 'ex forte fumatore da oltre 1 anno'
WHEN 'U' THEN 'ex forte fumatore'
WHEN 'P' THEN 'fumatore di pipa'
WHEN 'S' THEN 'fumatore di sigaro'
ELSE 'Non_Registrato' END) as char(31)) Tipo_fumatore
FROM cart_accert a
WHERE a.codice=p.codice AND a.ac_code like '2832' and not exists (select b.codice from cart_accert b where a.codice = b.codice and b.ac_code Like '2832' and (b.data_open>a.data_open or (b.data_open=a.data_open and b.rowid>a.rowid)) and b.ac_val is not null)) _Fumo_
FROM PAZIENTI p, NOS_002 n
WHERE p.codice=n.codice
AND _bmi_ is not null
AND (n.pa_drevoca IS NULL or n.pa_drevoca >TODAY()) AND (p.decesso IS NULL)
AND p.pa_convenzione='S'
AND n.pa_medi like '%'
AND _Data_BMI_ BETWEEN '2011/01/01' AND '2011/12/31'
order by 1,2
Naturalmente estrae dati se sono stati inseriti e fa riferimento all'anno 2011 come indicato. Prova ad estendere la ricerca mettendo come periodo da esaminare:
AND _Data_BMI_ BETWEEN '2000/01/01' AND '2011/12/31'
Questa query invece mi da sempre ZERO, pur avendo allargato la ricerca a tutto il 2009. Lavorando con le viste, mi sono accorto che ci sono problemi sia per la ricerca dei fumatori sia per l'attività fisica. In questi due casi non mi vengono selezionati quelli con risultato, ma anche quelli che il risultato non ce l'hanno per quasti due campi. Potrebbe essere questo?
Re: Query complessa
drtulino ha scritto:
.....BMI ......
Questa query invece mi da sempre ZERO, pur avendo allargato la ricerca a tutto il 2009. Lavorando con le viste, mi sono accorto che ci sono problemi sia per la ricerca dei fumatori sia per l'attività fisica. In questi due casi non mi vengono selezionati quelli con risultato, ma anche quelli che il risultato non ce l'hanno per quasti due campi. Potrebbe essere questo?
La query estrae solo i pazienti a cui in uno stesso giorno sono stati inseriti peso, altezza e BMI e poi di costoro considera attività fisica, fumo, ecc.
Re: Query complessa
Viste le difficoltà di questa query chiedo a Giuseppe o a quanti di vorranno adoperare se è possibile costruire le seguenti query:
1) Quanti pazienti (numericamente e non nominativo) nel 2011 hanno un dato per ciascuno di questi campi:
- BMI
- Circonferenza vita
- Alcool
- Fumo
- Attività fisica
2) Quanti pazienti diabetici (numericamente e non nominativo) con età superiore a 16 anni hanno fatto terapia nel 2011 con:
- Statine (CA10AA*)
- ACE inibitori (C09*)
- ASA (B01AC06)
3) Quanti pazienti diabetici (numericamente e non nominativo) con età superiore a 16 anni hanno almeno uno dei seguenti accertamenti nel 2011:
- 90.16.4; 90.16.3; 90.28.1; 90.33.4; 90.14.3; 90.14.1; 90.43.2
4) Quanti pazienti con BPCO (numericamente e non nominativo) hanno almeno eseguito una spirometria (89.37.1 o 89.37.2) nel 2011
5) Quanti pazienti con BPCO (numericamente e non nominativo) hanno almeno una prescrizione di broncodilatatori (R03AC* o R03AK*) nel 2011
Ringrazio anticipatamente tutti coloro che mi daranno una mano, ho provato a fare copia/incolla da precedenti query, ma mi sa che devo imparare ancora tanto in questo.
1) Quanti pazienti (numericamente e non nominativo) nel 2011 hanno un dato per ciascuno di questi campi:
- BMI
- Circonferenza vita
- Alcool
- Fumo
- Attività fisica
2) Quanti pazienti diabetici (numericamente e non nominativo) con età superiore a 16 anni hanno fatto terapia nel 2011 con:
- Statine (CA10AA*)
- ACE inibitori (C09*)
- ASA (B01AC06)
3) Quanti pazienti diabetici (numericamente e non nominativo) con età superiore a 16 anni hanno almeno uno dei seguenti accertamenti nel 2011:
- 90.16.4; 90.16.3; 90.28.1; 90.33.4; 90.14.3; 90.14.1; 90.43.2
4) Quanti pazienti con BPCO (numericamente e non nominativo) hanno almeno eseguito una spirometria (89.37.1 o 89.37.2) nel 2011
5) Quanti pazienti con BPCO (numericamente e non nominativo) hanno almeno una prescrizione di broncodilatatori (R03AC* o R03AK*) nel 2011
Ringrazio anticipatamente tutti coloro che mi daranno una mano, ho provato a fare copia/incolla da precedenti query, ma mi sa che devo imparare ancora tanto in questo.
Ultima modifica di drtulino il Ven 13 Apr 2012 - 19:25 - modificato 1 volta.
Re: Query complessa
Posso suggerire una query del tipo ( previa verifica di clausole e codici vari ) :
(Select ' Alcool 2011' As Esame, Count( Distinct a.codice) As pazienti From cart_accert a Where a.ac_des Like 'Alcool' And a.ac_val Is Not Null And Year( a.data_open) = 2011 )
Union
(Select ' Attivita Fisica 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_des Like 'Attiv%Fisica' And a.ac_val Is Not Null And Year( a.data_open) = 2011 )
Union
(Select ' Body Mass Index 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_des Like '%BMI%' And a.ac_val Is Not Null And Year( a.data_open) = 2011 )
Union
(Select ' Circonferenza Vita 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_des Like 'Circonf%Vita' And a.ac_val Is Not Null And Year( a.data_open) = 2011 )
Union
(Select ' Fumo 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_des Like 'Fumo' And a.ac_val Is Not Null And Year( a.data_open) = 2011 )
Union
(Select ' DM con Ace_Inibitori 2011' As Esame, Count( Distinct p.codice) From ( pazienti p Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_terap t On b.codice = t.codice
Where b.cp_code Like '250%' And t.co_atc Like 'C09%' And Year( t.data_open) = 2011
And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 )
Union
(Select ' DM con ASA 2011' As Esame, Count( Distinct t.codice) From ( pazienti p Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_terap t On b.codice = t.codice Where b.cp_code Like '250%' And t.co_atc Like 'B01AC06' And Year( t.data_open) = 2011
And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 )
Union
(Select ' DM con Statine 2011' As Esame, Count( Distinct t.codice) From ( pazienti p Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_terap t On b.codice = t.codice Where b.cp_code Like '250%' And t.co_atc Like 'C10AA%' And Year( t.data_open) = 2011
And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 )
Union
(Select ' DM con EEC 2011' As Esame, Count( Distinct b.codice) As pazienti From ( pazienti p Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_accert a On b.codice = a.codice Where b.cp_code Like '250%' And a.ac_nt_code IN ('90.16.4' , '90.16.3' ,'90.28.1','90.33.4', '90.14.3', '90.14.1' , '90.43.2') And Year( a.data_open) = 2011 And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 )
Union
(Select ' BPCO con Spirometria 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Where b.cp_code Like '496%'
And a.ac_nt_code IN ( '89.37.1' , '89.37.2' ) And Year( a.data_open) = 2011 )
Union
(Select ' BPCO con BroncoDilatatori 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_terap t On b.codice = t.codice Where b.cp_code Like '496%'
And ( t.co_atc Like 'R03AC%' Or t.co_atc Like 'R03AK%' ) And Year( t.data_open) = 2011 )
Order By 1
Non garantisco l' attendibilità del set estratto, visto che anche le precedenti query suggerite da Giuseppe e già a lungo testate, sul Tuo SO & Mille.db (mal)-funzionano, apparentemente senza una plausibile spiegazione
Un saluto da Sergio , Orzivecchi (BS )
(Select ' Alcool 2011' As Esame, Count( Distinct a.codice) As pazienti From cart_accert a Where a.ac_des Like 'Alcool' And a.ac_val Is Not Null And Year( a.data_open) = 2011 )
Union
(Select ' Attivita Fisica 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_des Like 'Attiv%Fisica' And a.ac_val Is Not Null And Year( a.data_open) = 2011 )
Union
(Select ' Body Mass Index 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_des Like '%BMI%' And a.ac_val Is Not Null And Year( a.data_open) = 2011 )
Union
(Select ' Circonferenza Vita 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_des Like 'Circonf%Vita' And a.ac_val Is Not Null And Year( a.data_open) = 2011 )
Union
(Select ' Fumo 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_des Like 'Fumo' And a.ac_val Is Not Null And Year( a.data_open) = 2011 )
Union
(Select ' DM con Ace_Inibitori 2011' As Esame, Count( Distinct p.codice) From ( pazienti p Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_terap t On b.codice = t.codice
Where b.cp_code Like '250%' And t.co_atc Like 'C09%' And Year( t.data_open) = 2011
And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 )
Union
(Select ' DM con ASA 2011' As Esame, Count( Distinct t.codice) From ( pazienti p Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_terap t On b.codice = t.codice Where b.cp_code Like '250%' And t.co_atc Like 'B01AC06' And Year( t.data_open) = 2011
And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 )
Union
(Select ' DM con Statine 2011' As Esame, Count( Distinct t.codice) From ( pazienti p Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_terap t On b.codice = t.codice Where b.cp_code Like '250%' And t.co_atc Like 'C10AA%' And Year( t.data_open) = 2011
And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 )
Union
(Select ' DM con EEC 2011' As Esame, Count( Distinct b.codice) As pazienti From ( pazienti p Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_accert a On b.codice = a.codice Where b.cp_code Like '250%' And a.ac_nt_code IN ('90.16.4' , '90.16.3' ,'90.28.1','90.33.4', '90.14.3', '90.14.1' , '90.43.2') And Year( a.data_open) = 2011 And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 )
Union
(Select ' BPCO con Spirometria 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Where b.cp_code Like '496%'
And a.ac_nt_code IN ( '89.37.1' , '89.37.2' ) And Year( a.data_open) = 2011 )
Union
(Select ' BPCO con BroncoDilatatori 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_terap t On b.codice = t.codice Where b.cp_code Like '496%'
And ( t.co_atc Like 'R03AC%' Or t.co_atc Like 'R03AK%' ) And Year( t.data_open) = 2011 )
Order By 1
Non garantisco l' attendibilità del set estratto, visto che anche le precedenti query suggerite da Giuseppe e già a lungo testate, sul Tuo SO & Mille.db (mal)-funzionano, apparentemente senza una plausibile spiegazione
Un saluto da Sergio , Orzivecchi (BS )
drtulino ha scritto:Viste le difficoltà di questa query chiedo a Giuseppe o a quanti di vorranno adoperare se è possibile costruire le seguenti query:
1) Quanti pazienti (numericamente e non nominativo) nel 2011 hanno un dato per ciascuno di questi campi:
- BMI
- Circonferenza vita
- Alcool
- Fumo
- Attività fisica
2) Quanti pazienti diabetici (numericamente e non nominativo) con età superiore a 16 anni hanno fatto terapia nel 2011 con:
- Statine (CA10AA*)
- ACE inibitori (C09*)
- ASA (B01AC06)
3) Quanti pazienti diabetici (numericamente e non nominativo) con età superiore a 16 anni hanno almeno uno dei seguenti accertamenti nel 2011:
- 90.16.4; 90.16.3; 90.28.1; 90.33.4; 90.14.3; 90.14.1; 90.43.2
4) Quanti pazienti con BPCO (numericamente e non nominativo) hanno almeno eseguito una spirometria (89.37.1 o 89.37.2) nel 2011
5) Quanti pazienti con BPCO (numericamente e non nominativo) hanno almeno una prescrizione di broncodilatatori (R03AC* o R03AK*) nel 2011
Ringrazio anticipatamente tutti coloro che mi daranno una mano, ho provato a fare copia/incolla da precedenti query, ma mi sa che devo imparare ancora tanto in questo.
Cervino- Membro Junior
- Messaggi : 245
Punti : 5284
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: Query complessa
Grazie Sergio per la query. Sembra funzionare bene o per lo meno sto analizzando i singoli risultati e, comunque, l'impostazione dei dati che mi servono è giusta. Ho diviso la ricerca per esami (creatinina, colesterolo, ecc.) singolarmente. Considerata la sproporzione di numeri di alcuni esami, lavorando in medicina di gruppo, suppongo che mi faccia l'estrazione complessiva di tutti i medici (servirebbe quindi inserire un comando con il codice del medico) e poi Ti chiedo conferma che la query è impostata sulla ricerca per il SOLO anno 2011.
Re: Query complessa
drtulino ha scritto:Grazie Sergio per la query. Sembra funzionare bene o per lo meno sto analizzando i singoli risultati e, comunque, l'impostazione dei dati che mi servono è giusta. Ho diviso la ricerca per esami (creatinina, colesterolo, ecc.) singolarmente. Considerata la sproporzione di numeri di alcuni esami, lavorando in medicina di gruppo, suppongo che mi faccia l'estrazione complessiva di tutti i medici (servirebbe quindi inserire un comando con il codice del medico) e poi Ti chiedo conferma che la query è impostata sulla ricerca per il SOLO anno 2011.
Confermo che l'ottima query di Sergio funziona bene ed estrae i dati inseriti nel 2011.
Per l'estrazione del singolo medico in medicina di gruppo basta inserire il solito Userid per ogni selezione, un po' laborioso ma non trovo un metodo più veloce, credo che Sergio ci riuscirà:
(Select ' 01-Alcool 2011' As Esame, Count( Distinct a.codice) As N_pazienti From cart_accert a Where a.ac_des Like 'Alcool' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 02-Attivita Fisica 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_des Like 'Attiv%Fisica' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 03-Body Mass Index 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_des Like '%BMI%' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 04-Circonferenza Vita 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_des Like 'Circonf%Vita' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 05-Fumo 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_des Like 'Fumo' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 06-DM con Ace_Inibitori 2011' As Esame, Count( Distinct t.codice) From cart_pazpbl b Left Outer Join cart_terap t On b.codice = t.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And t.co_atc Like 'C09%' And Year( t.data_open) = 2011 AND t.Userid like '%')
Union
(Select ' 07-DM con ASA 2011' As Esame, Count( Distinct t.codice) From cart_pazpbl b Left Outer Join cart_terap t On b.codice = t.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And t.co_atc Like 'B01AC06' And Year( t.data_open) = 2011 AND t.Userid like '%')
Union
(Select ' 08-DM con Statine 2011' As Esame, Count( Distinct t.codice) From cart_pazpbl b Left Outer Join cart_terap t On b.codice = t.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And t.co_atc Like 'C10AA%' And Year( t.data_open) = 2011 AND t.Userid like '%')
Union
(Select ' 09-DM con Creatinina 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.16.4' , '90.16.3') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 10-DM con Glicata 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.28.1') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 11-DM con Microalbuminuria 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.33.4') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 12-DM con Colesterolo 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.14.3') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 13-DM con HDL 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.14.1') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 14-M con Trigliceridi 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.43.2') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 15-BPCO con Spirometria 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Where b.cp_code Like '496%'
And a.ac_nt_code IN ( '89.37.1' , '89.37.2' ) And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 16-BPCO con BroncoDilatatori 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_terap t On b.codice = t.codice Where b.cp_code Like '496%'
And ( t.co_atc Like 'R03AC%' Or t.co_atc Like 'R03AK%' ) And Year( t.data_open) = 2011 AND b.Userid like '%')
ORDER BY 1
Ultima modifica di Admin il Sab 14 Apr 2012 - 18:26 - modificato 3 volte.
Re: Query complessa
Giusta la tua osservazione, in quanto viene analizzato l' intero database; purtroppo non faccio parte di una medicina di gruppo e di conseguenze le prove che posso fare su un mille.db monoutente sono limitate .
Comunque come eventuale suggerimento ma non garantisco, per l' anno 2011 e su un Mille.db MultiUtente prova con :
(Select ' Alcool 2011' As Esame, Count( Distinct a.codice) As pazienti From (( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_accert a On p.codice = a.codice Where u.cognome Like '%' And a.ac_des Like 'Alcool' And a.ac_val Is Not Null And Year( a.data_open) = 2011 And p.pa_convenzione = 'S' )
Union
(Select ' Attivita Fisica 2011' As Esame, Count( Distinct a.codice) From (( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_accert a On p.codice = a.codice Where u.cognome Like '%' And a.ac_des Like 'Attiv%Fisica' And a.ac_val Is Not Null And Year( a.data_open) = 2011 And p.pa_convenzione = 'S' )
Union
(Select ' Body Mass Index 2011' As Esame, Count( Distinct a.codice) From (( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_accert a On p.codice = a.codice Where u.cognome Like 'tom%' And a.ac_des Like '%BMI%' And a.ac_val Is Not Null And Year( a.data_open) = 2011 And p.pa_convenzione = 'S' )
Union
(Select ' Circonferenza Vita 2011' As Esame, Count( Distinct a.codice) From(( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_accert a On p.codice = a.codice Where u.cognome Like '%' And a.ac_des Like 'Circonf%Vita' And a.ac_val Is Not Null And Year( a.data_open) = 2011 And p.pa_convenzione = 'S' )
Union
(Select ' Fumo 2011' As Esame, Count( Distinct a.codice) From (( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_accert a On p.codice = a.codice Where u.cognome Like '%' And a.ac_des Like 'Fumo' And a.ac_val Is Not Null And Year( a.data_open) = 2011 And p.pa_convenzione = 'S' )
Union
(Select ' DM con Ace_Inibitori 2011' As Esame, Count( Distinct p.codice) From ((( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_terap t On p.codice = t.codice Where u.cognome Like '%' And b.cp_code Like '250%' And t.co_atc Like 'C09%' And Year( t.data_open) = 2011 And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 And p.pa_convenzione = 'S' )
Union
(Select ' DM con ASA 2011' As Esame, Count( Distinct t.codice) From ((( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_terap t On p.codice = t.codice Where u.cognome Like '%' And b.cp_code Like '250%' And t.co_atc Like 'B01AC06' And Year( t.data_open) = 2011 And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 And p.pa_convenzione = 'S' )
Union
(Select ' DM con Statine 2011' As Esame, Count( Distinct t.codice) From ((( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_terap t On p.codice = t.codice Where u.cognome Like '%' And b.cp_code Like '250%' And t.co_atc Like 'C10AA%' And Year( t.data_open) = 2011 And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 And p.pa_convenzione = 'S' )
Union
(Select ' DM con EEC 2011' As Esame, Count( Distinct b.codice) As pazienti From ((( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_accert a On p.codice = a.codice Where u.cognome Like '%' And b.cp_code Like '250%' And a.ac_nt_code IN ('90.16.4' , '90.16.3' ,'90.28.1','90.33.4', '90.14.3', '90.14.1' , '90.43.2') And Year( a.data_open) = 2011 And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 And p.pa_convenzione = 'S' )
Union
(Select ' BPCO con Spirometria 2011' As Esame, Count( Distinct b.codice) As pazienti From ((( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_accert a On p.codice = a.codice Where u.cognome Like '%' And b.cp_code Like '496%' And a.ac_nt_code IN ( '89.37.1' , '89.37.2' ) And Year( a.data_open) = 2011 And p.pa_convenzione = 'S' )
Union
(Select ' BPCO con BroncoDilatatori 2011' As Esame, Count( Distinct b.codice) As pazienti From ((( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_terap t On p.codice = t.codice Where u.cognome Like '%' And b.cp_code Like '496%' And ( t.co_atc Like 'R03AC%' Or t.co_atc Like 'R03AK%' ) And Year( t.data_open) = 2011 And p.pa_convenzione = 'S' )
Order By 1
Nella clausola < u.cognome Like '%' > bisogna introdurre le iniziali del proprio Cognome Utente ( 3 o 4 lettere sono sufficienti di solito, nel mio caso < u.cognome Like 'tom%' > ; in caso di Utenti con lo stesso cognome utilizzare la clausola < u.nome Like '%' > ; comunque i dati sono disponibili dalla vista v_utenti in MilleUtilità . Non garantisco x l' attendibilità e/o possibili errori .
Ti saluto , Sergio , Orzivecchi ( BS )
Comunque come eventuale suggerimento ma non garantisco, per l' anno 2011 e su un Mille.db MultiUtente prova con :
(Select ' Alcool 2011' As Esame, Count( Distinct a.codice) As pazienti From (( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_accert a On p.codice = a.codice Where u.cognome Like '%' And a.ac_des Like 'Alcool' And a.ac_val Is Not Null And Year( a.data_open) = 2011 And p.pa_convenzione = 'S' )
Union
(Select ' Attivita Fisica 2011' As Esame, Count( Distinct a.codice) From (( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_accert a On p.codice = a.codice Where u.cognome Like '%' And a.ac_des Like 'Attiv%Fisica' And a.ac_val Is Not Null And Year( a.data_open) = 2011 And p.pa_convenzione = 'S' )
Union
(Select ' Body Mass Index 2011' As Esame, Count( Distinct a.codice) From (( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_accert a On p.codice = a.codice Where u.cognome Like 'tom%' And a.ac_des Like '%BMI%' And a.ac_val Is Not Null And Year( a.data_open) = 2011 And p.pa_convenzione = 'S' )
Union
(Select ' Circonferenza Vita 2011' As Esame, Count( Distinct a.codice) From(( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_accert a On p.codice = a.codice Where u.cognome Like '%' And a.ac_des Like 'Circonf%Vita' And a.ac_val Is Not Null And Year( a.data_open) = 2011 And p.pa_convenzione = 'S' )
Union
(Select ' Fumo 2011' As Esame, Count( Distinct a.codice) From (( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_accert a On p.codice = a.codice Where u.cognome Like '%' And a.ac_des Like 'Fumo' And a.ac_val Is Not Null And Year( a.data_open) = 2011 And p.pa_convenzione = 'S' )
Union
(Select ' DM con Ace_Inibitori 2011' As Esame, Count( Distinct p.codice) From ((( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_terap t On p.codice = t.codice Where u.cognome Like '%' And b.cp_code Like '250%' And t.co_atc Like 'C09%' And Year( t.data_open) = 2011 And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 And p.pa_convenzione = 'S' )
Union
(Select ' DM con ASA 2011' As Esame, Count( Distinct t.codice) From ((( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_terap t On p.codice = t.codice Where u.cognome Like '%' And b.cp_code Like '250%' And t.co_atc Like 'B01AC06' And Year( t.data_open) = 2011 And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 And p.pa_convenzione = 'S' )
Union
(Select ' DM con Statine 2011' As Esame, Count( Distinct t.codice) From ((( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_terap t On p.codice = t.codice Where u.cognome Like '%' And b.cp_code Like '250%' And t.co_atc Like 'C10AA%' And Year( t.data_open) = 2011 And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 And p.pa_convenzione = 'S' )
Union
(Select ' DM con EEC 2011' As Esame, Count( Distinct b.codice) As pazienti From ((( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_accert a On p.codice = a.codice Where u.cognome Like '%' And b.cp_code Like '250%' And a.ac_nt_code IN ('90.16.4' , '90.16.3' ,'90.28.1','90.33.4', '90.14.3', '90.14.1' , '90.43.2') And Year( a.data_open) = 2011 And (DateDiff ( hh, nascita, '2011-12-31')/8766) >16 And p.pa_convenzione = 'S' )
Union
(Select ' BPCO con Spirometria 2011' As Esame, Count( Distinct b.codice) As pazienti From ((( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_accert a On p.codice = a.codice Where u.cognome Like '%' And b.cp_code Like '496%' And a.ac_nt_code IN ( '89.37.1' , '89.37.2' ) And Year( a.data_open) = 2011 And p.pa_convenzione = 'S' )
Union
(Select ' BPCO con BroncoDilatatori 2011' As Esame, Count( Distinct b.codice) As pazienti From ((( pazienti p Left Outer Join nos_002 n On p.codice = n.codice ) Left Outer Join v_utenti u On u.userid = n.pa_medi ) Left Outer Join cart_pazpbl b On p.codice = b.codice ) Left Outer Join cart_terap t On p.codice = t.codice Where u.cognome Like '%' And b.cp_code Like '496%' And ( t.co_atc Like 'R03AC%' Or t.co_atc Like 'R03AK%' ) And Year( t.data_open) = 2011 And p.pa_convenzione = 'S' )
Order By 1
Nella clausola < u.cognome Like '%' > bisogna introdurre le iniziali del proprio Cognome Utente ( 3 o 4 lettere sono sufficienti di solito, nel mio caso < u.cognome Like 'tom%' > ; in caso di Utenti con lo stesso cognome utilizzare la clausola < u.nome Like '%' > ; comunque i dati sono disponibili dalla vista v_utenti in MilleUtilità . Non garantisco x l' attendibilità e/o possibili errori .
Ti saluto , Sergio , Orzivecchi ( BS )
drtulino ha scritto:Grazie Sergio per la query. Sembra funzionare bene o per lo meno sto analizzando i singoli risultati e, comunque, l'impostazione dei dati che mi servono è giusta. Ho diviso la ricerca per esami (creatinina, colesterolo, ecc.) singolarmente. Considerata la sproporzione di numeri di alcuni esami, lavorando in medicina di gruppo, suppongo che mi faccia l'estrazione complessiva di tutti i medici (servirebbe quindi inserire un comando con il codice del medico) e poi Ti chiedo conferma che la query è impostata sulla ricerca per il SOLO anno 2011.
Cervino- Membro Junior
- Messaggi : 245
Punti : 5284
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: Query complessa
Admin ha scritto: Confermo che l'ottima query di Sergio funziona bene ed estrae i dati inseriti nel 2011.
Per l'estrazione del singolo medico in medicina di gruppo basta inserire il solito Userid per ogni selezione, un po' laborioso ma non trovo un metodo più veloce, credo che Sergio ci riuscirà:
Avevo già provato ma mi da' errore di sintassi.
Re: Query complessa
Cervino ha scritto:Giusta la tua osservazione, in quanto viene analizzato l' intero database; purtroppo non faccio parte di una medicina di gruppo e di conseguenze le prove che posso fare su un mille.db monoutente sono limitate .
Dopo aver effettuato alcune modifiche di alcuni codici, sembra funzionare perfettamente.
Grazie a te e Giuseppe per avermi dato questo grande aiuto.
Buon fine settimana.
Re: Query complessa
drtulino ha scritto:Admin ha scritto: Confermo che l'ottima query di Sergio funziona bene ed estrae i dati inseriti nel 2011.
Per l'estrazione del singolo medico in medicina di gruppo basta inserire il solito Userid per ogni selezione, un po' laborioso ma non trovo un metodo più veloce, credo che Sergio ci riuscirà:
Avevo già provato ma mi da' errore di sintassi.
Strano, hai fatto copia/incolla dell'intera query ed inserito parte del tuo codice prima di % in ogni selezione ?
Adesso ho anche aggiunto la clausola: diabetici di età > 16 anni
Ultima modifica di Admin il Sab 14 Apr 2012 - 18:01 - modificato 1 volta.
Re: Query complessa
Admin ha scritto:drtulino ha scritto:Admin ha scritto: Confermo che l'ottima query di Sergio funziona bene ed estrae i dati inseriti nel 2011.
Per l'estrazione del singolo medico in medicina di gruppo basta inserire il solito Userid per ogni selezione, un po' laborioso ma non trovo un metodo più veloce, credo che Sergio ci riuscirà:
Avevo già provato ma mi da' errore di sintassi.
Strano, hai fatto copia/incolla dell'intera query ed inserito parte del tuo codice prima di % in ogni selezione ?
Considerata la Tua convinzione, ho voluto riprovare ed ho fatto bene, perchè: FUNZIONA. Ho controllato la precedente e mi sono accorto che nel copia/incolla mi era saltata la prima parentesi. Potrebbe essere stata questa la causa dell'errore!!!!
Grazie Giuseppe e complimenti a Te e Sergio per la grande competenza che ancora una volta avete dimostrato.
Re: Query complessa
A conclusione dell'ottimo lavoro fatto da Giuseppe e Sergio e per consentire un continuo miglioramento delle query, di seguito allego le estrazioni dei miei pazienti con delle piccole modifiche da me effettuate. Ci sono delle differenze sostanziali, soprattutto per la prescrizione di Statine, Ace inibitori ed ASA che confrontandoli con l'analisi della spesa per farmaci si avvicina, ai dati derivanti, più l'estrazione dati di Sergio.
L'estrazione di Giuseppe mi continua a NON estrarre Alcool ed Attività fisica e non riesco a capire il motivo.
L'estrazione di Giuseppe mi continua a NON estrarre Alcool ed Attività fisica e non riesco a capire il motivo.
- File allegati
Re: Query complessa
Prova anche questa:
(Select ' 01-Alcool 2011' As Esame, Count( Distinct a.codice) As N_pazienti From cart_accert a Where a.ac_Code Like '2904' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 02-Attivita Fisica 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_Code Like '2835' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 03-Body Mass Index 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_Code Like '2609' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 04-Circonferenza Vita 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_Code Like '3560' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 05-Fumo 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_Code Like '2832' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 06-DM con Ace+Sartani 2011' As Esame, Count( Distinct t.codice) From cart_pazpbl b Left Outer Join cart_terap t On b.codice = t.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And t.co_atc Like 'C09%' And Year( t.data_open) = 2011 AND t.Userid like '%')
Union
(Select ' 07-DM con ASA 2011' As Esame, Count( Distinct t.codice) From cart_pazpbl b Left Outer Join cart_terap t On b.codice = t.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And t.co_atc Like 'B01AC06' And Year( t.data_open) = 2011 AND t.Userid like '%')
Union
(Select ' 08-DM con Statine 2011' As Esame, Count( Distinct t.codice) From cart_pazpbl b Left Outer Join cart_terap t On b.codice = t.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And t.co_atc Like 'C10AA%' And Year( t.data_open) = 2011 AND t.Userid like '%')
Union
(Select ' 09-DM con Creatinina 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.16.4' , '90.16.3') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 10-DM con Glicata 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.28.1') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 11-DM con Microalbuminuria 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.33.4') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 12-DM con Colesterolo 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.14.3') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 13-DM con HDL 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.14.1') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 14-M con Trigliceridi 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.43.2') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 15-BPCO con Spirometria 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Where b.cp_code Like '496%'
And a.ac_nt_code IN ( '89.37.1' , '89.37.2' ) And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 16-BPCO con BroncoDilatatori 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_terap t On b.codice = t.codice Where b.cp_code Like '496%'
And ( t.co_atc Like 'R03AC%' Or t.co_atc Like 'R03AK%' ) And Year( t.data_open) = 2011 AND b.Userid like '%')
ORDER BY 1
(Select ' 01-Alcool 2011' As Esame, Count( Distinct a.codice) As N_pazienti From cart_accert a Where a.ac_Code Like '2904' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 02-Attivita Fisica 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_Code Like '2835' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 03-Body Mass Index 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_Code Like '2609' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 04-Circonferenza Vita 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_Code Like '3560' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 05-Fumo 2011' As Esame, Count( Distinct a.codice) From cart_accert a Where a.ac_Code Like '2832' And a.ac_val Is Not Null And Year( a.data_open) = 2011 AND a.Userid like '%')
Union
(Select ' 06-DM con Ace+Sartani 2011' As Esame, Count( Distinct t.codice) From cart_pazpbl b Left Outer Join cart_terap t On b.codice = t.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And t.co_atc Like 'C09%' And Year( t.data_open) = 2011 AND t.Userid like '%')
Union
(Select ' 07-DM con ASA 2011' As Esame, Count( Distinct t.codice) From cart_pazpbl b Left Outer Join cart_terap t On b.codice = t.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And t.co_atc Like 'B01AC06' And Year( t.data_open) = 2011 AND t.Userid like '%')
Union
(Select ' 08-DM con Statine 2011' As Esame, Count( Distinct t.codice) From cart_pazpbl b Left Outer Join cart_terap t On b.codice = t.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And t.co_atc Like 'C10AA%' And Year( t.data_open) = 2011 AND t.Userid like '%')
Union
(Select ' 09-DM con Creatinina 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.16.4' , '90.16.3') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 10-DM con Glicata 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.28.1') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 11-DM con Microalbuminuria 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.33.4') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 12-DM con Colesterolo 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.14.3') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 13-DM con HDL 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.14.1') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 14-M con Trigliceridi 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Left Outer Join pazienti p ON b.codice=p.codice
Where b.cp_code Like '250%' AND Years(p.nascita, Today())>16
And a.ac_nt_code IN ('90.43.2') And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 15-BPCO con Spirometria 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_accert a On b.codice = a.codice Where b.cp_code Like '496%'
And a.ac_nt_code IN ( '89.37.1' , '89.37.2' ) And Year( a.data_open) = 2011 AND b.Userid like '%')
Union
(Select ' 16-BPCO con BroncoDilatatori 2011' As Esame, Count( Distinct b.codice) As pazienti From cart_pazpbl b Left Outer Join cart_terap t On b.codice = t.codice Where b.cp_code Like '496%'
And ( t.co_atc Like 'R03AC%' Or t.co_atc Like 'R03AK%' ) And Year( t.data_open) = 2011 AND b.Userid like '%')
ORDER BY 1
Ultima modifica di Admin il Dom 15 Apr 2012 - 1:05 - modificato 1 volta.
Re: Query complessa
Grazie Giuseppe. Questa mi estrae sia i dati Alcool che Attività fisica, ma per quanto riguarda gli Ace inibitori e le Statine i valori sono abbastanza differenti da quelli che estraggo con la query di Sergio e che invece sono abbastanza simili con quelli che incrocio con l'estrazione da Centrale Statistica per farmaci. Non capisco il perchè, considerato che a prima vista le impostazioni sono simili, ma Voi ci avete insegnato che una piccola impostazione della query può fare grandi differenze.
Re: Query complessa
drtulino ha scritto:Grazie Giuseppe. Questa mi estrae sia i dati Alcool che Attività fisica, ma per quanto riguarda gli Ace inibitori e le Statine i valori sono abbastanza differenti da quelli che estraggo con la query di Sergio e che invece sono abbastanza simili con quelli che incrocio con l'estrazione da Centrale Statistica per farmaci. Non capisco il perchè, considerato che a prima vista le impostazioni sono simili, ma Voi ci avete insegnato che una piccola impostazione della query può fare grandi differenze.
Condivido : le due query hanno una piccola ( ma a quanto pare non trascurabile ) differenza in :
< Count ( t.codice) > // < Count ( p.codice) > ;
analizzare un numero minore di Tabelle non è sempre vantaggioso : la tabella < Pazienti > nel Mille.db è il perno centrale di un complesso database relazionale e per questo ho utilizzato < Count ( p.codice) > ; sarà la soluzione ottimale ? : a volte si , a volte no , altre volte … forse
Saluti , Sergio
Cervino- Membro Junior
- Messaggi : 245
Punti : 5284
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Pagina 1 di 3 • 1, 2, 3
Pagina 1 di 3
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.