Elenco pazienti per fasce di età
4 partecipanti
Pagina 1 di 1
Elenco pazienti per fasce di età
Per una ricognizione a livello regionale sui pazienti diabetici mi servirebbe un'estrazione di pazienti cosìfatta
l'estrazione riguarda il totale dei pazienti, non solo i diabetici
Qualcuno degli esimi esperti di SQL mi può aiutare??
Grazie anticipatamente
sesso | fascia eta | anno2003 | 2006 | 2010 |
F | età 0-14 aa | |||
F | età 15-19 aa | |||
F | età 20-24 aa | |||
F | età 25-29 aa | |||
F | età 30-34 aa | |||
F | età 35-39 aa | |||
F | età 40-44 aa | |||
F | età 45-49 aa | |||
F | età 50-54 aa | |||
F | età 55-59 aa | |||
F | età 60-64 aa | |||
F | età 65-69 aa | |||
F | età 70-74 aa | |||
F | età 75-79 aa | |||
F | età 80-84 aa | |||
F | età 85-89 aa | |||
F | età 90-94 aa | |||
F | età 95-99 aa | |||
F | età > 100 aa | |||
M | età 0-14 aa | |||
M | età 15-19 aa | |||
M | età 20-24 aa | |||
M | età 25-29 aa | |||
M | età 30-34 aa | |||
M | età 35-39 aa | |||
M | età 40-44 aa | |||
M | età 45-49 aa | |||
M | età 50-54 aa | |||
M | età 55-59 aa | |||
M | età 60-64 aa | |||
M | età 65-69 aa | |||
M | età 70-74 aa | |||
M | età 75-79 aa | |||
M | età 80-84 aa | |||
M | età 85-89 aa | |||
M | età 90-94 aa | |||
M | età 95-99 aa | |||
M | età > 100 aa | |||
TOTALE | 0 | 0 | 0 |
Qualcuno degli esimi esperti di SQL mi può aiutare??
Grazie anticipatamente
madelbi- Moderatore
- Messaggi : 357
Punti : 5302
Voti per importanza dei messaggi : 68
Data d'iscrizione : 21.02.11
Località : Pesaro
Re: Elenco pazienti per fasce di età
madelbi ha scritto:Per una ricognizione a livello regionale sui pazienti diabetici mi servirebbe un'estrazione di pazienti cosìfatta
......
l'estrazione riguarda il totale dei pazienti, non solo i diabetici
Qualcuno degli esimi esperti di SQL mi può aiutare??
Grazie anticipatamente
Scusa Marco ma dovresti indicare da quale anno parte la ricognizione..
Re: Elenco pazienti per fasce di età
La ricognizione è relativa al 2003, al 2006 e al 2010
madelbi- Moderatore
- Messaggi : 357
Punti : 5302
Voti per importanza dei messaggi : 68
Data d'iscrizione : 21.02.11
Località : Pesaro
Re: Elenco pazienti per fasce di età
Il database di MW non è strutturato in maniera idonea, forse opportunamente, per estrazioni di dati di tipo burocrato-amministrativo ;
è problematico anche per software ad hoc predisposti, usati dalla Regione e dalle ASL, rispondere esaurientemente ad una simile richiesta,
per una lunga serie di motivi .
Nel mio Mille.db il campo : data di scelta del medico da parte del paziente , è assente in oltre il 50 % dei casi ;
comunque tanto per provare, si potrebbe tentare con una query del tipo :
Select Cast( ' F eta 0-14 anni ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 0 And 14 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01'))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 0 And 14 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01'))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 0 And 14 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2010-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01')
UNION
Select Cast( ' F eta 15-19 anni ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 15 And 19 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01'))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 15 And 19 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01'))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 15 And 19 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2010-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01' )
UNION
Select Cast( ' F eta 20-24 anni ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 20 And 24 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01'))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 20 And 24 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01'))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 20 And 24 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2010-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01' )
UNION
Select Cast( ' F Totale ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 0 And 120 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01' ))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 0 And 120 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01' ))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 0 And 120 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2010-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01' )
UNION
Select Cast( ' M eta 0-14 anni ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 0 And 14 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01' ))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 0 And 14 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01' ))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 0 And 14 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2010-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01' )
UNION
Select Cast( ' M eta 15-19 anni ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 15 And 19 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S'))And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01' ))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 15 And 19 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S'))And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01' ))
_2006,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 15 And 19 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S'))And (p.decesso Is Null Or p.decesso > '2010-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01' )
UNION
Select Cast( ' M eta 20-24 anni ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 20 And 24 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S'))And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01' ))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 20 And 24 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01' ))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 20 And 24 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '200-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01' )
UNION
Select Cast( ' M Totale ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 0 And 120 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01' ))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 0 And 120 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01' ))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 0 And 120 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01' )
UNION
Select Cast( ' Paz Totale ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 0 And 120 And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01'))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 0 And 120 And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01'))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 0 And 120 And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2010-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01')
Order By 1
Se il set estratto dovesse risultare accettabile, dopo aver adattato la query alla propria situazione locale, basta ovviamente continuare il lavoro di copia ed incolla ( da UNION a ... UNION ) con parcellari modifiche delle clausole, per analizzare tutte le fascie d' età ( salendo con gli anni l' attendibilità dei dati dovrebbe forse migliorare ) .
Oltre una certa lunghezza, la query comunque si dovrebbe bloccare; in tal caso basta dividerla in due parti .
Un saluto da Sergio Tomasini , Orzivecchi (BS)
è problematico anche per software ad hoc predisposti, usati dalla Regione e dalle ASL, rispondere esaurientemente ad una simile richiesta,
per una lunga serie di motivi .
Nel mio Mille.db il campo : data di scelta del medico da parte del paziente , è assente in oltre il 50 % dei casi ;
comunque tanto per provare, si potrebbe tentare con una query del tipo :
Select Cast( ' F eta 0-14 anni ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 0 And 14 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01'))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 0 And 14 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01'))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 0 And 14 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2010-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01')
UNION
Select Cast( ' F eta 15-19 anni ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 15 And 19 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01'))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 15 And 19 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01'))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 15 And 19 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2010-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01' )
UNION
Select Cast( ' F eta 20-24 anni ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 20 And 24 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01'))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 20 And 24 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01'))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 20 And 24 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2010-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01' )
UNION
Select Cast( ' F Totale ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 0 And 120 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01' ))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 0 And 120 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01' ))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 0 And 120 And sesso = 'F' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2010-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01' )
UNION
Select Cast( ' M eta 0-14 anni ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 0 And 14 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01' ))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 0 And 14 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01' ))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 0 And 14 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2010-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01' )
UNION
Select Cast( ' M eta 15-19 anni ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 15 And 19 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S'))And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01' ))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 15 And 19 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S'))And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01' ))
_2006,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 15 And 19 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S'))And (p.decesso Is Null Or p.decesso > '2010-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01' )
UNION
Select Cast( ' M eta 20-24 anni ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 20 And 24 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S'))And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01' ))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 20 And 24 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01' ))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 20 And 24 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '200-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01' )
UNION
Select Cast( ' M Totale ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 0 And 120 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01' ))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 0 And 120 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01' ))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 0 And 120 And sesso = 'M' And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01' )
UNION
Select Cast( ' Paz Totale ' As Char(22)) As fascia_eta,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2003 - Year ( nascita ) Between 0 And 120 And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2003-12-31' Or ( pa_drevoca Between '2003-01-01'
And '2003-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2003-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2004-01-01'))
_2003_,
(Select Count ( p.codice) From pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2006 - Year ( nascita ) Between 0 And 120 And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2006-12-31' Or ( pa_drevoca Between '2006-01-01'
And '2006-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2006-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2007-01-01'))
_2006_,
Count ( p.codice) As _2010_
FROM pazienti p Inner Join nos_002 n On p.codice = n.codice
Where 2010 - Year ( nascita ) Between 0 And 120 And pa_convenzione = 'S'
And ( pa_drevoca Is Null Or pa_drevoca > '2010-12-31' Or ( pa_drevoca Between '2010-01-01'
And '2010-12-31' And motivo_revoca = 'S')) And (p.decesso Is Null Or p.decesso > '2010-12-31' )
And ( pa_dscelta Is Null Or pa_dscelta < '2011-01-01')
Order By 1
Se il set estratto dovesse risultare accettabile, dopo aver adattato la query alla propria situazione locale, basta ovviamente continuare il lavoro di copia ed incolla ( da UNION a ... UNION ) con parcellari modifiche delle clausole, per analizzare tutte le fascie d' età ( salendo con gli anni l' attendibilità dei dati dovrebbe forse migliorare ) .
Oltre una certa lunghezza, la query comunque si dovrebbe bloccare; in tal caso basta dividerla in due parti .
Un saluto da Sergio Tomasini , Orzivecchi (BS)
Cervino- Membro Junior
- Messaggi : 245
Punti : 5095
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 69
Località : Orzivecchi (BS)
Re: Elenco pazienti per fasce di età
madelbi ha scritto:La ricognizione è relativa al 2003, al 2006 e al 2010
Della serie: se son facili, non le vogliamo. Caro Marco, vuoi vederci morti ?
A parte gli scherzi, credo che estrarre tutto quanto richiesto , utilizzando una sola query e solo l’SQL di Mille utilità (alquanto misero) sia così arduo da perderci la testa e il sonno per svariate notti. Comunque ne verrebbe fuori una tale schifezza informatica, che non ne vale proprio la pena. Il vero SQL avrebbe gli strumenti per evitare tali porcherie, ma purtroppo non ci è permesso usarli
Allora per non faticare troppo (ed anche per un minimo senso estetico), ecco una query che estrae tutti i dati da te richiesti (ma relativamente ad un solo anno: 2010). Per estenderla agli altri anni, dovrai semplicemente ripeterla più volte ,cambiando l’anno scritto nella prima riga della query.Ogni volta salva il relativo tabulato in un file excel.Infine, per riassumere i dati dei vari files così ottenuti in un solo report, usa il copia –incolla. In pochi minuti avrai i dati disposti nel modo da te voluto . L' età dei paz viene calcolata al 31 Dicembre dell'anno considerato
------------------------------------------------------------------------------------------------------------------------
select 2010 /* <<<<<da cambiare*/ as anno,
number(*) as Gruppo,
'Da ' + string((DATEDIFF ( year,p.nascita,CONVERT(varchar,string(anno,'/','12','/','31') , 103))/5) * 5)
+ ' a ' + string( ( ( (DATEDIFF ( year,p.nascita,CONVERT(varchar,string(anno,'/','12','/','31') , 103))/ 5) + 1 ) * 5) - 1 )
+ ' anni' as Fascia_eta,count((DATEDIFF ( year,p.nascita,CONVERT(varchar,string(anno,'/','12','/','31') , 103)) / 5)) quanti,p.sesso sesso
from pazienti p, nos_002 nos
WHERE nos.pa_medi='KGDKDC5' /* <<<<<da cambiare*/
and p.codice=nos.codice
and (nos.pa_dscelta IS null Or YEAR(nos.pa_dscelta)<=anno)
AND p.codice NOT IN
(select nos.codice FROM nos_002 nos WHERE (YEAR(nos. pa_drevoca)<=anno ))
group by p.sesso,(DATEDIFF ( year,p.nascita,CONVERT(varchar,string(anno,'/','12','/','31') , 103)) / 5), fascia_eta
order by 5,2
-----------------------------------------------------------------------------------------------
Per quanto riguarda i totali delle varie annate non sarebbe necessario l’uso dell’SQL: infatti basta andare in mille Utilità-movimento paz e puoi averli facilmente oppure -ancora meglio- puoi utilizzare il comodo pulsante di excel “somma automatica”: lo disponi sotto i dati dei quali vuoi il totale, ed ecco i totali senza scervellarsi troppo. Se però tu fossi masochista e volessi utilizzare a tutti i costi l’SQL , beccati questa porcheria:
-----------------------------------------------------------------------------------------------------------------
SELECT 2010 /* <<<<<da cambiare*/ as anno,
count (nos.codice) as attivi from NOS_002 nos
Where nos. pa_medi= 'KGDKDC5' /* <<<<<da cambiare*/ and
(nos.pa_dscelta IS null Or YEAR(nos.pa_dscelta)<=anno)
AND nos. codice NOT IN
(select codice FROM NOS_002 WHERE (YEAR(pa_drevoca)<=anno))
UNION
SELECT 2009 /* <<<<<da cambiare*/ as anno,
count (nos.codice) as attivi from NOS_002 nos
Where nos. pa_medi= 'KGDKDC5' /* <<<<<da cambiare*/ and
(nos.pa_dscelta IS null Or YEAR(nos.pa_dscelta)<=anno)
AND nos. codice NOT IN
(select codice FROM NOS_002 WHERE (YEAR(pa_drevoca)<=anno))
UNION
SELECT 2008 /* <<<<<da cambiare*/ as anno,
count (nos.codice) as attivi from NOS_002 nos
Where nos. pa_medi= 'KGDKDC5' /* <<<<<da cambiare*/ and
(nos.pa_dscelta IS null Or YEAR(nos.pa_dscelta)<=anno)
AND nos. codice NOT IN
(select codice FROM NOS_002 WHERE (YEAR(pa_drevoca)<=anno))
UNION
SELECT 2011 /* <<<<<da cambiare*/ as anno,
count (nos.codice) as attivi from NOS_002 nos
Where nos. pa_medi= 'KGDKDC5' /* <<<<<da cambiare*/ and
(nos.pa_dscelta IS null Or YEAR(nos.pa_dscelta)<=anno)
AND nos. codice NOT IN
(select codice FROM NOS_002 WHERE (YEAR(pa_drevoca)<=anno))
order by 1
ciao
draleo
PS: Entrambi le query presuppongono che per i deceduti sia compilato anche il campo data revoca (altrimenti i conti non ritornano); Inoltre poichè io ho in archivio solo i paz del SSN non ho inserito la clausola che esclude i paz di libera professione. Ma è semplice aggiungerla , come quella che esclude i deceduti
draleo83- Membro Junior
- Messaggi : 225
Punti : 5121
Voti per importanza dei messaggi : 25
Data d'iscrizione : 21.02.11
Re: Elenco pazienti per fasce di età
L'idea di fare un calcolo così assurdo non è stata mia, ovviamente, ma di una docente universitaria (e non dico di più) che richiede tali dati senza dare indicazione su come estrarli dal db. Alla mia richiesta di delucidazioni ha suggerito questa metodologia "Per prima cosa da milleutilità stampare la lista pz ed inserire l'intervallo di tempo di osservazione. Salvato il file in excel e elaborarlo inserendo una colonna 01.01.2006. Facendo la differenza tra questa colonna con la data di nascita ho ricavato l'età del pz nel momento di osservazione. Poi la divisione in fasce non è difficile"
Non trovato il procedimento convincente per cui mi sono permesso di ricorrere al forum e vi ringrazio della celere ed articolata risposta...sicuramente più performante della procedura "universitaria"
Grazie a Sergio e Leo!!!
Non trovato il procedimento convincente per cui mi sono permesso di ricorrere al forum e vi ringrazio della celere ed articolata risposta...sicuramente più performante della procedura "universitaria"
Grazie a Sergio e Leo!!!
madelbi- Moderatore
- Messaggi : 357
Punti : 5302
Voti per importanza dei messaggi : 68
Data d'iscrizione : 21.02.11
Località : Pesaro
Re: Elenco pazienti per fasce di età
madelbi ha scritto:L'idea di fare un calcolo così assurdo non è stata mia, ovviamente, ma di una docente universitaria (e non dico di più) che richiede tali dati senza dare indicazione su come estrarli dal db. Alla mia richiesta di delucidazioni ha suggerito questa metodologia "Per prima cosa da milleutilità stampare la lista pz ed inserire l'intervallo di tempo di osservazione. Salvato il file in excel e elaborarlo inserendo una colonna 01.01.2006. Facendo la differenza tra questa colonna con la data di nascita ho ricavato l'età del pz nel momento di osservazione. Poi la divisione in fasce non è difficile"
Non trovato il procedimento convincente per cui mi sono permesso di ricorrere al forum e vi ringrazio della celere ed articolata risposta...sicuramente più performante della procedura "universitaria"
Grazie a Sergio e Leo!!!
Comunque l'idea del "docente universitario" non è proprio da scartare (anzi...ad averci pensato prima, si potevano evitare tutte queste menate. Comunque saranno almeno servite come utili... esercizi sull'SQL)
E' proprio vero il principio scientifico del Rasoio di ....(qualche scienziato di cui non ricordo il nome):
"A parità di condizioni, la soluzione più semplice è quella che ha più probabilità di essere giusta"
Leonardo
draleo83- Membro Junior
- Messaggi : 225
Punti : 5121
Voti per importanza dei messaggi : 25
Data d'iscrizione : 21.02.11
Re: Elenco pazienti per fasce di età
Il Rasoio era quello di OCCAM (Novacula Occami) | « A parità di fattori la spiegazione più semplice è da preferire » |
(Guglielmo di Occam) ripreso da Duns Scoto (filosofia Scolastica medievale) « Entia non sunt multiplicanda praeter necessitatem. » « Pluralitas non est ponenda sine necessitate. » « Frustra fit per plura quod fieri potest per pauciora. » Ottimo, Leo il riferimento alla scienza del passato che nonostante l'attuale ubriacatura di tecnologia non è affatto rimasta obsoleta...di cultori giammai è orba!! |
madelbi- Moderatore
- Messaggi : 357
Punti : 5302
Voti per importanza dei messaggi : 68
Data d'iscrizione : 21.02.11
Località : Pesaro
Re: Elenco pazienti per fasce di età
madelbi ha scritto:
Il Rasoio era quello di OCCAM (Novacula Occami) « A parità di fattori la spiegazione più semplice è da preferire » (Guglielmo di Occam) ripreso da Duns Scoto (filosofia Scolastica medievale)
« Entia non sunt multiplicanda praeter necessitatem. »
« Pluralitas non est ponenda sine necessitate. »
« Frustra fit per plura quod fieri potest per pauciora. »
Ottimo, Leo il riferimento alla scienza del passato che nonostante l'attuale ubriacatura di tecnologia non è affatto rimasta obsoleta...di cultori giammai è orba!!
Come è erudito Lei!
Ricordavo tale citazione , ma ero convinto che si trattasse di un vero principio scientifico, non filosofico
Comunque è sempre attuale: le soluzioni semplici (che è diverso da semplicistiche), spesso, sono anche le più efficaci
Bisognerebbe sempre pensarci
ciao
leonardo
draleo83- Membro Junior
- Messaggi : 225
Punti : 5121
Voti per importanza dei messaggi : 25
Data d'iscrizione : 21.02.11
Re: Elenco pazienti per fasce di età
draleo83 ha scritto:
Per quanto riguarda i totali delle varie annate non sarebbe necessario l’uso dell’SQL: infatti basta andare in mille Utilità-movimento paz e puoi averli facilmente oppure -ancora meglio- puoi utilizzare il comodo pulsante di excel “somma automatica”: lo disponi sotto i dati dei quali vuoi il totale, ed ecco i totali senza scervellarsi troppo. Se però tu fossi masochista e volessi utilizzare a tutti i costi l’SQL , beccati questa porcheria:
ecc ecc ecc
Rimedio alla precedente schifezza informatica scritta dal sottoscritto.La seguente estrae il num dei paz attivi, anno per anno, dal 2000 in avanti. Quindi ottiene gli stessi risultati della precedente, ma ,è molto più compatta e, stavolta, sembra una decente query sql; al contrario della precedente che era una vera porcheria (anche se otteneva gli stessi risultati)
Select distinct Year (data_open) anno,
(SELECT count (nos.codice) as attivi
from NOS_002 nos
where
nos. pa_medi= 'XXXXXXX' /* <<<<<da cambiare*/
AND (nos.pa_dscelta IS null Or YEAR(nos.pa_dscelta)<=anno)
AND nos. codice NOT IN
(select codice FROM NOS_002 WHERE (YEAR(pa_drevoca)<=anno)))
from NOS_002
Where anno >= 2000
Group by data_open
order by 1
draleo83- Membro Junior
- Messaggi : 225
Punti : 5121
Voti per importanza dei messaggi : 25
Data d'iscrizione : 21.02.11
Pagina 1 di 1
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.
|
|