Newsgroup: it.comp.appl.access
Titolo: chiedo aiuto su query

Ragazzi, chi mi sa trovare il codice sql per risolvere il seguente problema?
Ho una tabella avente una chiave primaria composta dai campi IDCliente,
IDProdotto e MioCodice, come nel seguente esempio:
IDCliente        IDProdotto        MioCodice        Importo
C15                P100                  1                         50
C15                P100                  5                         100
C15                P100                  9                          20
C7                  P30                    1                           10
C7                  P30                     9                          15
Devo creare una query che mi restituisca un'unica riga per tutti i record
che hanno gli stessi valori nei campi IDCliente, IDProdotto (per questo
credo sia necessaria una query di raggruppamento); inoltre la query
risultante deve contenere un campo Risultato che contenga la stringa "ok" se
per l'accoppiata IDCliente, IDProdotto è presente un record con valore 5 nel
campo MioCodice.
E' più facile vederlo che capirlo, il risultato deve essere il seguente:
IDCliente        IDProdotto        Risultato
C15                P100                  ok
C7                  P30                    non valido
La coppia C15, P100 ha Risultato = "ok" perché per quella coppia era
presente un record con valore 5 nel campo MioCodice.
La coppia C7, P30 invece non aveva nessun record con valore 5 nel campo
MioCodice, quindi restituisce Risultato = "non valido".
Qualche luminare fra di voi è in grado di formulare il codice SQL di questo
problema?
Grazie, Stefano.

 ha scritto nel messaggio
news:CiLsc.241242$hc5.10...@news3.tin.it...

è un po' una porcata ma funziona:
SELECT Tabella.IDCliente, Tabella.IDProdotto,
Max(IIf([Tabella]![MioCodice]=5,"ok","non valido")) AS Risultato
FROM Tabella
GROUP BY Tabella.IDCliente, Tabella.IDProdotto;
NB : funziona solo perchè "ok" in ordine alfabetico viene dopo "non valido"
altrimenti non potrei usare il Max
ciao
Giovanni


non ho provato con una grossa tabella per vedere che query plan venga fuori
=;-D ... sicuramente pesante =;-D
SET NOCOUNT ON
CREATE TABLE dbo.Tabella (
 IdCliente VARCHAR(5) NOT NULL ,
 IdProdotto VARCHAR(5) NOT NULL ,
 MioCodice INT NOT NULL DEFAULT 0 ,
 Importo INT NOT NULL DEFAULT 0
 )
GO
INSERT INTO dbo.Tabella VALUES ( 'C15' , 'P100', 1 , 50)
INSERT INTO dbo.Tabella VALUES ( 'C15' , 'P100', 5 , 100)
INSERT INTO dbo.Tabella VALUES ( 'C15' , 'P100', 9 , 20)
INSERT INTO dbo.Tabella VALUES ( 'C7' , 'P30', 1 , 10)
INSERT INTO dbo.Tabella VALUES ( 'C7' , 'P30', 9 , 15)
GO
SELECT t.IdCliente
 , t.IdProdotto
 , CASE WHEN EXISTS( SELECT t2.MioCodice FROM dbo.Tabella t2 WHERE
t2.MioCodice = 5 AND t.IdCliente = t2.IdCliente AND t.IdProdotto =
t2.IdProdotto ) THEN 'ok' ELSE 'NON valido' END AS [Risultato]
 FROM dbo.Tabella t
 GROUP BY t.IdCliente , t.IdProdotto
 ORDER BY t.IdCliente , t.IdProdotto
GO
DROP TABLE dbo.Tabella
--<-----------------------
IdCliente IdProdotto Risultato
--------- ---------- ---------- 
C15       P100       ok
C7        P30        NON valido
saluti
-- 
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz/DbaMgr.shtm
 
http://italy.mvps.org
DbaMgr2k ver 0.7.0  -  DbaMgr ver 0.53.0
(my vb6+sql-dmo little try to provide MS MSDE 1.0 and MSDE 2000 a visual
interface)
--------- remove DMO to reply

 Grazie
Prego.
Ciao!
-- 
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org

 Grazie, Stefano.
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:VtYsc.21001$Wc.7...@twister2.libero.it...
