Select con count

lunedì 06 ottobre 2008 - 15.35

trinity Profilo | Guru

Salve ragazzi,

ho questa tabella:

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


supponiamo che vado a salvarci i seguenti dati:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


io vorrei eseguire una select che mi restituisca su un'unica riga utilizzando anche il group by

il numero totale di arrivi e di partenze per nazione in base ad una between eseguita sulla data di arrivo

in pratica stando ai dati inseriti deve uscire questo:

NAZIONE - ARRIVI - PARTITI
ITALIA 5 4
FRANCIA 3 3
GERMNIA 1 0

Tutto qua, come posso fare?
Ho utilizzato la UNION All prendendo prima gli arrivi e poi le partenze ma non va bene ossia non mi fa uscire l'impaginazione che vorrei


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

lbenaglia Profilo | Guru

>Tutto qua, come posso fare?
Prima di tutto devi imparare a scrivere correttamente i comandi T-SQL.
Come? Provando il codice prima di postarlo.
Ho perso 15 minuti a sistemare il tuo codice SQL e 10 secondi a scrivere la query che ti serve:

USE tempdb; CREATE TABLE dbo.Archivio_mov_new( IdDb bigint IDENTITY(1,1) NOT NULL, codalbergo int NULL, codcomalbergo int NULL, DataArrivo smalldatetime NULL, DataPartenza smalldatetime NULL, StatoResidenza varchar(10) NULL CONSTRAINT PK_Archivio_mov_new PRIMARY KEY(IdDb) ); INSERT dbo.Archivio_mov_new VALUES(48, 60035, '20081001', '20081002', 'ITALIA'); INSERT dbo.Archivio_mov_new VALUES(48, 60035, '20081001', '20081002', 'ITALIA'); INSERT dbo.Archivio_mov_new VALUES(48, 60035, '20081001', '20081002', 'ITALIA'); INSERT dbo.Archivio_mov_new VALUES(48, 60035, '20081001', '20081002', 'ITALIA'); INSERT dbo.Archivio_mov_new VALUES(48, 60035, '20081001', NULL ,'ITALIA'); INSERT dbo.Archivio_mov_new VALUES(48, 60035, '20081004', '20081005' ,'FRANCIA'); INSERT dbo.Archivio_mov_new VALUES(48, 60035, '20081004', '20081005' ,'FRANCIA'); INSERT dbo.Archivio_mov_new VALUES(48, 60035, '20081004', '20081005' ,'FRANCIA'); INSERT dbo.Archivio_mov_new VALUES(48, 60035, '20081006', NULL ,'GERMANIA'); SET ANSI_WARNINGS OFF; SELECT StatoResidenza AS NAZIONE , COUNT(DataArrivo) AS ARRIVI , COUNT(DataPartenza) AS PARTITI FROM dbo.Archivio_mov_new GROUP BY StatoResidenza; /* Output: NAZIONE ARRIVI PARTITI ---------- ----------- ----------- FRANCIA 3 3 GERMANIA 1 0 ITALIA 5 4 (3 row(s) affected) */ DROP TABLE dbo.Archivio_mov_new;

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

trinity Profilo | Guru

Pensavo di aver scritto tutto bene, cmq scusami tanto e grazie dell'aiuto
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

lbenaglia Profilo | Guru

>Pensavo di aver scritto tutto bene, cmq scusami tanto e grazie
>dell'aiuto
Non c'è bisogno di pensare, basta copiare il codice in SSMS e premere F5.
Noterai decine di errori...

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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