Estrazione SQL

martedì 12 aprile 2011 - 08.58

dupperelko Profilo | Junior Member

Ciao a tutti, riassumo problema:

tabella A:
cod
azienda
citta
agente

tabella B:
cod
nomeprodotto
qty


quindi in tabella A avrò:
1520 seat milano 001
1521 google torino 001
1522 fiat milano 002

in B avrò:
1520 monitor 4
1520 pc 2
1520 mouse 5
1521 pendrive 2
1521 hd 3


vorrei tirar fuori tutti i record della tabella B raggruppati per citta tramite un parametro "agente"
quindi se passo 001, avrò:
torino 1
milano 1
se passo, 2 avrò:
milano 1


Ho provato a inserire questa query ma non è corretta.. dove sbaglio?

SELECT SOH.citta, Count(*) AS totelementi
FROM A AS SOH INNER JOIN B AS ST ON SOH .cod= ST.cod
WHERE (((SOH.agente)=[?]))
GROUP BY SOH.citta


grazie per l'aiuto e

saluti


lbenaglia Profilo | Guru

>vorrei tirar fuori tutti i record della tabella B raggruppati
>per citta tramite un parametro "agente"
>quindi se passo 001, avrò:
>torino 1
>milano 1
>se passo, 2 avrò:
>milano 1

Ciao,

Non ho capito cosa rappresenta quell' 1 come seconda colonna.
Potresti essere più chiaro?

>grazie per l'aiuto e
>
>saluti
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

dupperelko Profilo | Junior Member

>>vorrei tirar fuori tutti i record della tabella B raggruppati
>>per citta tramite un parametro "agente"
>>quindi se passo 001, avrò:
>>torino 1
>>milano 1
>>se passo, 2 avrò:
>>milano 1
>
>Ciao,
>
>Non ho capito cosa rappresenta quell' 1 come seconda colonna.
>Potresti essere più chiaro?
>

Ciao Lorenzo,
sarebbero i record presenti in tabella A dell'agente passato come parametro

quindi se ho:
1520 seat milano 001
1521 google torino 001
1522 fiat milano 002
1523 ferrero milano 001

vorrei tirar fuori (se passo 001 come par)
milano 2
torino 1


immagino si potrebbe lavorare solo su tabella A facendo un where agente e città..
ma io voglio poi dopo anche tutti i prodotti relativi a quell'azienda...
per questo o inserito inner

>Ciao!

ciao
>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/

lbenaglia Profilo | Guru

>ma io voglio poi dopo anche tutti i prodotti relativi a quell'azienda...

Ti vengo incontro:

USE tempdb; CREATE TABLE dbo.A( cod int NOT NULL, azienda varchar(10) NOT NULL, città varchar(10) NOT NULL, agente char(3) NOT NULL ); CREATE TABLE dbo.B( cod int NOT NULL, nomeprodotto varchar(10) NOT NULL, qty int NOT NULL ); INSERT dbo.A VALUES(1520, 'seat', 'milano', '001') , (1521, 'google', 'torino', '001') , (1522, 'fiat', 'milano', '002'); INSERT dbo.B VALUES(1520, 'monitor', 4) , (1520, 'pc', 2) , (1520, 'mouse', 5) , (1521, 'pendrive', 2) , (1521, 'hd', 3);


Completa l'esercizio con il result set COMPLETO che vorresti ottenere con quei dati.

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

dupperelko Profilo | Junior Member

si.. in effetti mi sono reso conto che mi sto complicando la vita perché voglio fare 2 cose in una.

quindi direi di fare un Count(*) di città raggruppato
in funzione dell'agente, che passando 001 avrò:
milano 1 ---------> dove 1 sono i record in cui compare 001
torino 1 ---------> idem

se poi passo 002, avrò:
milano 1


e poi dopo con calma vado a vedere in tabella B i record relativi al cod...

quindi
come strutturo il count e il group?

Grazie

lbenaglia Profilo | Guru

>si.. in effetti mi sono reso conto che mi sto complicando la
>vita perché voglio fare 2 cose in una.
>
>quindi direi di fare un Count(*) di città raggruppato
>in funzione dell'agente, che passando 001 avrò:
>milano 1 ---------> dove 1 sono i record in cui compare
>001
Ma non sono 2?!?!

>e poi dopo con calma vado a vedere in tabella B i record relativi
>al cod...
>
>quindi
>come strutturo il count e il group?
Non ci hai ancora spiegato quale result set desideri ottenere, pertanto non ho idea di come aiutarti.

>Grazie
Prego.

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

dupperelko Profilo | Junior Member

Ti ringrazio per la celerità :)

rispiego.. se ho questo:
VALUES(1520, 'seat', 'milano', '001')
, (1521, 'google', 'torino', '001')
, (1522, 'fiat', 'milano', '002');

e voglio sapere l'agente 001 quanti clienti ha in ogni paese, non ottengo questo?
milano 1
torino 1


se invece avessi questo:
VALUES(1520, 'seat', 'milano', '001')
, (1521, 'pollo', 'torino', '001')
, (1523, 'google', 'torino', '001')
, (1522, 'fiat', 'milano', '002');
, (1524, 'micro', 'torino', '001')

otterei (cioè, vorrei ottenere) questo (se passo 001 come par):
milano 1
torino 3




tutto qui


grazie



lbenaglia Profilo | Guru

>se invece avessi questo:
>VALUES(1520, 'seat', 'milano', '001')
> , (1521, 'pollo', 'torino', '001')
> , (1523, 'google', 'torino', '001')
> , (1522, 'fiat', 'milano', '002');
> , (1524, 'micro', 'torino', '001')
>
>otterei (cioè, vorrei ottenere) questo (se passo 001 come par):
>milano 1
>torino 3
>
>tutto qui

USE tempdb; CREATE TABLE dbo.A( cod int NOT NULL, azienda varchar(10) NOT NULL, città varchar(10) NOT NULL, agente char(3) NOT NULL ); INSERT dbo.A VALUES(1520, 'seat', 'milano', '001') , (1521, 'pollo', 'torino', '001') , (1523, 'google', 'torino', '001') , (1522, 'fiat', 'milano', '002') , (1524, 'micro', 'torino', '001'); SELECT città, COUNT(*) AS numero FROM dbo.A WHERE agente = '001' GROUP BY città; /* Output: città numero ---------- ----------- milano 1 torino 3 (2 row(s) affected) */ DROP TABLE dbo.A;


>grazie
Prego.

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

dupperelko Profilo | Junior Member

Grazie grazie... era più semplice a fare che a dire ...

ecco dove sbagliavo
SELECT città, Count(*) AS totelementi GROUP BY città
FROM A
WHERE agente=?


adesso mi sono ricordato che group non può essere inserito nelle select!

Grazie mille Lorenzo

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