Newsgroup: it.comp.lang.visual-basic
Titolo: [SQL] Select abbastanza tosta (almeno per me :)

Salve a tutti, vi espongo il problema:
Ho due tabelle strutturate in modo uguale:
| CodPiatto | Descrizione | Quantità | Prezzo | PrezzoTotale |
devo fare in modo che il contenuto di una della seconda tabella sia
eliminato dalla prima, tenendo però conto delle quantità, inoltre le righe
non sono univoche ma 2 righe = si possono ripetere.
Es.
1a Tabella
|       1         | Pizza         |      10    | 7.000   |  70.000         |
2a Tabella
|       1         | Pizza         |        2    | 7.000   |  14.000
|
la tabella 1 quindi dovrà diventare:
|       1         | Pizza        |        8     | 7.000   |  56.000        |
volevo tentare di fare una select in modo da selezionare per Ogni Codice
Piatto la sua Quantità Totale per poi definire meglio la query ma non ci
sono riuscito ...
Qualcuno è capace di risolvere questo problema ?
GRAZIE

 wrote in message
news:9qnd2h$rlu$1...@nreada.inwind.it...


 GRAZIE
Ciao Claudio,
ignoro quale DB stai usando, per cui ti propongo una 
soluzione il piu' possibile *ANSI-92 compliant*.
Inoltre, non ho capito se i record duplicati possono esserci su
_1a Tabella_, su _2a Tabella_ o su entrambe.
Ho provato su SQL Server 7.0 adottando i seguenti presupposti:
	a) _1a Tabella_ [nel seguito TABA]: record duplicati non ammessi
	b) TABA: CodPiatto è chiave univoca e autoincrementale
	c) _2a Tabella_ [nel seguito TABB]: record duplicati ammessi
	d) TABB: CodPiatto è il campo di relazione con TABA
	e) puoi fare cut&paste e provare tramite Analyzer
/**** Inizio Script  ******/
CREATE TABLE TABA
(
	CodPiatto            Integer         IDENTITY(1, 1),
	Descrizione          Varchar(20)     NOT NULL,
	Qty                  Integer         NOT NULL,
	Prezzo               Numeric(16, 0)  NOT NULL
)
GO
CREATE TABLE TABB
(
	CodPiatto            Integer        NOT NULL,
	Descrizione          Varchar(20)    NOT NULL,
	Qty                  Integer        NOT NULL,
	Prezzo               Numeric(16, 0) NOT NULL
)
GO
INSERT INTO TABA (Descrizione, Qty, Prezzo)
           VALUES("Pizza", 10, 70000)
INSERT INTO TABA (Descrizione, Qty, Prezzo)
           VALUES("Pasta", 10, 10000)
INSERT INTO TABA (Descrizione, Qty, Prezzo)
           VALUES("Polpetta", 50, 50000)
INSERT INTO TABB (CodPiatto, Descrizione, Qty, Prezzo)
           VALUES(1, "Pizza", 2, 14000)
INSERT INTO TABB (CodPiatto, Descrizione, Qty, Prezzo)
           VALUES(2, "Pasta", 1, 1000)
INSERT INTO TABB (CodPiatto, Descrizione, Qty, Prezzo)
           VALUES(3, "Polpetta", 1, 1000)
INSERT INTO TABB (CodPiatto, Descrizione, Qty, Prezzo)
           VALUES(3, "Polpetta", 1, 1000)
INSERT INTO TABB (CodPiatto, Descrizione, Qty, Prezzo)
           VALUES(3, "Polpetta", 1, 1000)
INSERT INTO TABB (CodPiatto, Descrizione, Qty, Prezzo)
           VALUES(3, "Polpetta", 2, 2000)
GO
--Verifica: selezione nuovi valori via derived table
SELECT 
	 AA.CodPiatto,
	 AA.Descrizione,
	(AA.Qty - BB.SumOfQty)       As NewQty,
	(AA.Prezzo - BB.SumOfPrezzo) As NewPrezzo
FROM TABA AA INNER JOIN
	(SELECT  CodPiatto,
	         SUM(Qty)    As SumOfQty,
	         SUM(Prezzo) As SumOfPrezzo
         FROM TABB
         GROUP BY CodPiatto
        ) As BB
        ON AA.CodPiatto = BB.CodPiatto
--Update:
UPDATE TABA
   SET Qty = (AA.Qty - BB.SumOfQty),
   SET Prezzo = (AA.Prezzo - BB.SumOfPrezzo)
FROM TABA AA,
	(SELECT  CodPiatto,
	         SUM(Qty)    As SumOfQty,
	         SUM(Prezzo) As SumOfPrezzo
         FROM TABB
         GROUP BY CodPiatto
        ) AS BB
WHERE AA.CodPiatto = BB.CodPiatto
/****** Termine Script ******/
Restituisce, e aggiorna, i dati come hai richiesto.
HTH
Ciao
	Adriano

grazie a tutti, ho risolto con il suggerimento di dads mettendo la quantità
della seconda tabella come negativa poi sommando le due tabelle e facendo
una select univoca per codice piatto.
Grazie a tutti!
CIAO