[sql]estrazione filtrata

mercoledì 21 gennaio 2009 - 18.11

the_driver Profilo | Senior Member

Ciao a tutti , utilizzo SQL SERVER 2005 standard e BUSINESS INTELLINGENCE per estrarre i dati e migrarli in un altro db.

Avrei però il seguente problema.

Ho 2 tabelle:

Struttura--> impiegati ; struttura indica i centri in cui vi sono gli impiegati: per esempio la struttura di Bari ha 200 impiegati,quella di Roma 140 e via dicendo , dovrei però estrarre per ogni centro al massimo 50 impiegati. Come faccio?

A livello di query si potrebbe fare una select con un group by limitato a 50?????

Grazie mille!

lbenaglia Profilo | Guru

>Ho 2 tabelle:
>
>Struttura--> impiegati ; struttura indica i centri in cui
>vi sono gli impiegati: per esempio la struttura di Bari ha 200
>impiegati,quella di Roma 140 e via dicendo , dovrei però estrarre
>per ogni centro al massimo 50 impiegati. Come faccio?
>
>A livello di query si potrebbe fare una select con un group by
>limitato a 50?????

Ciao Marco,

Con la GROUP BY no, ma con una UDF e l'operatore CROSS APPLY si
Se vuoi un esempio posta i comandi di CREATE TABLE delle due tabelle comprensivi di constraints, alcune righe di prova (INSERT INTO) ed il result set che desideri con quei dati (limitiamoci ad un TOP 5 onde evitare di farti postare centinaia di comandi di INSERT INTO ).

>Grazie mille!
Prego.

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

the_driver Profilo | Senior Member

Ti posto il codice per la creazione delle 2 tabelle




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


e la seconda ....

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

Come inserimento:

in "center"

1 Milano
2 Roma
3 Napoli


mentre in user:

1 1 paolo rossi
2 2 stefano bianchi
3 1 michele verdi

Grazie mille



the_driver Profilo | Senior Member

Ti ho postato 2 tabelle semplici,in realta il db è molto + complesso ma non posso postarlo ... sorry

Per esempio all'interno della tabella center , ci sono circa 30 città ....

lbenaglia Profilo | Guru

>Ti ho postato 2 tabelle semplici,in realta il db è molto + complesso
>ma non posso postarlo ... sorry
>
>Per esempio all'interno della tabella center , ci sono circa
>30 città ....

I dati sono un po' pochini e mi sono limitato a recuperare 2 utenti (tu dovrai modificare la TOP(2) in TOP(50)):

USE tempdb; CREATE TABLE dbo.center( id_center int NOT NULL, city varchar(10) NULL, CONSTRAINT PK_center PRIMARY KEY(id_center) ); CREATE TABLE dbo.[user]( id_user int NOT NULL, id_center int NOT NULL, name varchar(10) NULL, surname varchar(10) NULL, CONSTRAINT PK_user PRIMARY KEY(id_user), CONSTRAINT FK_user_center FOREIGN KEY(id_center) REFERENCES dbo.center(id_center) ); INSERT dbo.center VALUES (1, 'Milano') , (2, 'Roma') , (3, 'Napoli'); INSERT dbo.[user] VALUES (1, 1, 'paolo', 'rossi') , (2, 2, 'stefano', 'bianchi') , (3, 1, 'michele', 'verdi'); GO CREATE FUNCTION dbo.udf_GetUsers( @id_center int ) RETURNS TABLE RETURN( SELECT TOP(2) * FROM dbo.[user] WHERE id_center = @id_center ); GO SELECT U.*, C.city FROM dbo.center AS C CROSS APPLY dbo.udf_GetUsers(C.id_center) AS U; /* Output: id_user id_center name surname city ----------- ----------- ---------- ---------- ---------- 1 1 paolo rossi Milano 3 1 michele verdi Milano 2 2 stefano bianchi Roma (3 row(s) affected) */ DROP FUNCTION dbo.udf_GetUsers; DROP TABLE dbo.[user], dbo.center;

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

the_driver Profilo | Senior Member

sei un mostro! grazie mille!


Ma una cosa non ho ancora ben capito:
tale query la inserisco in un oggetto DATA FLOW in SSIS,e quindi mi restituirà dei risultati. Il recordset risultante come faccio a riutilizzarlo (precisamente il campo id_user) in altri oggetti DATA FLOW ,precisamente, l'id_user verrà posto come condizione "where" in altre query.

Grazie e scusa per il casino



lbenaglia Profilo | Guru

>Ma una cosa non ho ancora ben capito:
>tale query la inserisco in un oggetto DATA FLOW in SSIS,e quindi
>mi restituirà dei risultati. Il recordset risultante come faccio
>a riutilizzarlo (precisamente il campo id_user) in altri oggetti
>DATA FLOW ,precisamente, l'id_user verrà posto come condizione
>"where" in altre query.
I SSIS sono un mondo di Ale, ti risponderà lui

>Grazie e scusa per il casino
Prego.

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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5