>Si può fare? voglio estrarre la lista dei prodotti a prezzo più
>basso (ATTENZIONE LA LISTA DEI PRODOTTI!!!!) delle aziende che
>hanno sia ORO che COLL.
In SQL Server farei così:
USE tempdb;
CREATE TABLE dbo.foo(
ID int NOT NULL PRIMARY KEY,
IDAZIENDA char(5) NOT NULL,
IDPRODOTTO varchar(5) NOT NULL,
PRODOTTO varchar(10) NOT NULL,
PREZZO int NOT NULL
);
INSERT dbo.foo VALUES
(1, 'IDAZ1', 'ORO', 'Descriz 1', 500)
,(2, 'IDAZ1', 'ORO', 'Descriz 2', 300)
,(3, 'IDAZ1', 'ORO', 'Descriz 3', 200)
,(4, 'IDAZ1', 'COLL', 'Descriz 4', 100)
,(5, 'IDAZ1', 'COLL', 'Descriz 5', 400)
,(6, 'IDAZ1', 'COLL', 'Descriz 6', 200)
,(7, 'IDAZ2', 'COLL', 'Descriz 7', 150)
,(8, 'IDAZ2', 'COLL', 'Descriz 8', 350)
,(9, 'IDAZ2', 'COLL', 'Descriz 9', 900)
,(10, 'IDAZ2', 'ORO', 'Descriz 10', 900)
,(11, 'IDAZ2', 'ORO', 'Descriz 11', 800)
,(12, 'IDAZ2', 'ORO', 'Descriz 12', 700)
,(13, 'IDAZ2', 'ORO', 'Descriz 13', 700)
,(14, 'IDAZ3', 'BRAC', 'Descriz 14', 700);
WITH CTE_GetKey(IDAZIENDA, IDPRODOTTO, PREZZO) AS
(
SELECT
IDAZIENDA
, IDPRODOTTO
, MIN(PREZZO)
FROM dbo.foo
WHERE IDPRODOTTO IN('ORO', 'COLL')
GROUP BY IDAZIENDA, IDPRODOTTO
)
SELECT F.*
FROM dbo.foo AS F
JOIN CTE_GetKey AS C
ON F.IDAZIENDA = C.IDAZIENDA
AND F.IDPRODOTTO = C.IDPRODOTTO
AND F.PREZZO = C.PREZZO;
/* Output:
ID IDAZIENDA IDPRODOTTO PRODOTTO PREZZO
----------- --------- ---------- ---------- -----------
4 IDAZ1 COLL Descriz 4 100
3 IDAZ1 ORO Descriz 3 200
7 IDAZ2 COLL Descriz 7 150
12 IDAZ2 ORO Descriz 12 700
13 IDAZ2 ORO Descriz 13 700
(5 row(s) affected)
*/
DROP TABLE dbo.foo;
>gRAZIE
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org