Gestione del count

giovedì 07 maggio 2009 - 11.53

trinity Profilo | Guru

Buongiorno ragazzi,
supponiamo che io ho questi record:

CREATE TABLE [dbo].[tipologia](
[Id] [int] IDENTITY(1,1) NOT NULL,
[codicecomune] [int] NULL,
[tipoAlbergo] [varchar](50) NULL,
CONSTRAINT [PK_tipologia] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Insert Into tipologia (codicecomune,tipoalbergo) Values (60001,'5 stelle')
Insert Into tipologia (codicecomune,tipoalbergo) Values (60001,'5 stelle')
Insert Into tipologia (codicecomune,tipoalbergo) Values (60001,'5 stelle')
Insert Into tipologia (codicecomune,tipoalbergo) Values (60001,'5 stelle')
Insert Into tipologia (codicecomune,tipoalbergo) Values (60038,'5 stelle')

allora l'esempio non è proprio del mio caso ma la logica si, io eseguo questa select:

Select codicecomune,tipoalbergo from tipologia group by codicecomune,tipoalbergo.
ora io dovrei avere una colonna aggiuntiva che mi calcoli il numero delle tipologie in base al codice comune ossia un risultato del genere:

60001 - 5 stelle - 4
60038 - 5 stelle - 1

come potrei fare?

mi sfugge :-)

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

lbenaglia Profilo | Guru

>ora io dovrei avere una colonna aggiuntiva che mi calcoli il
>numero delle tipologie in base al codice comune ossia un risultato
>del genere:
>
>60001 - 5 stelle - 4
>60038 - 5 stelle - 1
>
>come potrei fare?

Una banale COUNT(*)?

USE tempdb; CREATE TABLE dbo.Tipologia( Id int IDENTITY(1,1) NOT NULL, CodiceComune int NOT NULL, TipoAlbergo varchar(10) NOT NULL, CONSTRAINT PK_tipologia PRIMARY KEY(Id) ); INSERT dbo.Tipologia VALUES(60001, '5 stelle'); INSERT dbo.Tipologia VALUES(60001, '5 stelle'); INSERT dbo.Tipologia VALUES(60001, '5 stelle'); INSERT dbo.Tipologia VALUES(60001, '5 stelle'); INSERT dbo.Tipologia VALUES(60038, '5 stelle'); SELECT CodiceComune , TipoAlbergo , COUNT(*) AS Conteggio FROM dbo.Tipologia GROUP BY CodiceComune , TipoAlbergo; /* Output: CodiceComune TipoAlbergo Conteggio ------------ ----------- ----------- 60001 5 stelle 4 60038 5 stelle 1 (2 row(s) affected) */ DROP TABLE dbo.Tipologia;

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

trinity Profilo | Guru

ok com eimmaginavo allora mi domando perchè in questa select non mi funziona?

SELECT tblTemp.codcomune, tblTemp.comune, tblTemp.CodiceOrdinamento, count(*)as totstrutture, tblTemp.TotCamere, tblTemp.TotLetti, tblTemp.TotBagni FROM ( select alb.codcomune, c.comune, case when COUNT(cam.nrcamera)<25 then 1 when COUNT(cam.nrcamera) >=100 then 3 ELSE 2 END as CodiceOrdinamento, COUNT(cam.nrcamera) As TotCamere, isnull(sum(cam.nrletti)+sum(cam.nrlettiextra),'0') As TotLetti, isnull(Sum(cam.nrbagni),'0') As TotBagni From albergo as alb join dbo.comuni as c ON alb.codcomune=c.codcomune join anagrafica_camere as cam ON alb.codalb=cam.codalbergo group by alb.codcomune,c.comune ) AS tblTemp group by tblTemp.codcomune, tblTemp.comune, tblTemp.CodiceOrdinamento, tblTemp.totcamere, tblTemp.totletti, tblTemp.totbagni

mi dovrebbe uscire questo risultato:

60001 Acquafondata 1 1 3 8 3 60038 Frosinone 2 3 82 130 82 invece esce: 60001 Acquafondata 1 1 3 8 3 60038 Frosinone 2 1 82 130 82





Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

lbenaglia Profilo | Guru

>ok com eimmaginavo allora mi domando perchè in questa select
>non mi funziona?
Se posti un esempio completo come il mio, forse saremo in grado di rispondere

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

trinity Profilo | Guru

allora ecco la tabella:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

dati sono un pò particolari perchè dovremmo avere in teoria tanti record ora ne posto alcuni:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ho messo i record al di sotto delle 25 camere...

ossia io devo prendere tutti gli alberghi per comune, vedere se sono inferiori a 25 camere e sommare il tutto ottenendo anche il numero di strutture al di sotto delle 25 camere.
Lo stesso per strutture tra 25 e 99 e poi superiore alle 100.
Nella select creo anche un codiceordinamento perchè poi mi serve in vb per il fine di una stampa....

Ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

lbenaglia Profilo | Guru

>allora ecco la tabella:
>
>CREATE TABLE [dbo].[Anagrafica_camere](

E le altre 2 dove sono?
Senza esempio completo (tabelle, dati e result set) non è possibile aiutarti.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

trinity Profilo | Guru

questa è la tabella albergo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

questa è la tabella comuni:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

il risultato che deve uscire è il seguente:

60001=Roma
60002=Pisa
60003=Latina

quindi

codicecomune comune codiceordinamento totstrutture totcamere totletti totbagni
60001 Roma 1 1 4 12 4
60002 Pisa 1 2 4 12 4
60003 latina 1 1 1 3 1

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5