50 messaggi dal 14 luglio 2007
Ciao a tutti,
Non riesco a capire bene come funziona il Distinct.
Io ho una query con dei prodotti, ed alcuni prodotti è probabile che abbiano lo stesso nome.
Vorrei una query che contiene tutti i campi dei prodotti, con i prodotti di nome diverso.

Se faccio select distinct nome from tabella mi escono solo i nomi .
Come posso fare?
Grazie mille
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
MaRsHaL wrote:
Ciao a tutti,
Non riesco a capire bene come funziona il Distinct.
Io ho una query con dei prodotti, ed alcuni prodotti è probabile che abbiano lo stesso nome.
Vorrei una query che contiene tutti i campi dei prodotti, con i prodotti di nome diverso.

Se faccio select distinct nome from tabella mi escono solo i nomi . Come posso fare?
Grazie mille

SELECT DISTINCT [nome], [altraColonna], [altraColonna2], .... ,[altraColonnaN]
FROM tabella;


saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
50 messaggi dal 14 luglio 2007
Niente mi visualizza anche quelli con il nome uguale.
C'entra qualcosa il fatto che ci sia una WHERE?

Da come ho capito, inserendo tutte le colonne, fa in modo che si cancellino le righe completamente uguali.
A me interessa solo il nome uguali, perchè anche quella con nome uguale, hanno un ID diverso e quindi con il codice che mi hai postato tu non si cancellano.

Grazie
Modificato da MaRsHaL il 24 giugno 2008 20.10 -
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Con la clausola DISTINCT rimuovi eventuali duplicati nel recordset restituito. Se fai un attimo mente locale ti renderai conto che data una tabella definita e popolata come

CREATE TABLE dbo.Nominativi
(
ID smallint identity (1, 1) NOT NULL,
Nome varchar(20) NOT NULL,
Cognome varchar(20) NOT NULL,
Comune varchar(20) NOT NULL
);
GO

INSERT dbo.Nominativi VALUES ('Luca', 'Bianchi', 'Roma')
INSERT dbo.Nominativi VALUES ('Andrea', 'Montanari', 'Riccione')
INSERT dbo.Nominativi VALUES ('Daniele', 'Bochicchio', 'Roma')
GO

Puoi certamente estrarre una lista delle sole città presenti con l'istruzione

SELECT DISTINCT Comune FROM dbo.Nominativi

ma se vuoi sapere anche altri attributi della stessa tabella, magari solo il cognome, l'istruzione

SELECT DISTINCT Comune, Cognome FROM dbo.Nominativi

restituirà per ovvi motivi tutti e 3 i records. Non può essere diversamente perchè tra i 2 di Roma, altrimenti, quale dei 2 nominativi deve essere salvaguardato...? Se hai un criterio è possibile trasformare l'istruzione di cui sopra in

SELECT Comune, MIN(Cognome) FROM dbo.Nominativi GROUP BY Comune

dove nell'esempio viene restituito il "minimo" (ovviamente in ordine alfabetico). Se un criterio non ce l'hai il problema diventa di ordine concettuale...

Bye


volendo una lista che contenga

Basta che fai un attimo mente locale
50 messaggi dal 14 luglio 2007
Bhe ma io il criterio ce l'ho. Mi basta prendere tutte le righe con solo il nome diverso.
Da come ho capitoquindi la distintc può non fare al caso mio.
Come mi consigliate di procedere?
(in realtà è pochissimo tempo che studio l'sql quindi nn ne conosco ancora bene le reali capacità  )
Grazie
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
MaRsHaL ha scritto:
Bhe ma io il criterio ce l'ho. Mi basta prendere tutte le righe con solo il nome diverso.


E allora non devi far altro che

SELECT DISTINCT nome FROM tabella

Se invece non è vero che "ti basta prendere tutte le righe con solo il nome diverso" devi riformulare in maniera corretta questa affermazione...

(in realtà è pochissimo tempo che studio l'sql quindi nn ne conosco ancora bene le reali capacità  )


"T-SQL is logic" (citazione)

Grazie


Bye
50 messaggi dal 14 luglio 2007
Si a me basta prendere tutte le righe (e non solo una parte, quindi ovviamente tutte le colonne) solo se non ci sono ripetizioni nella colonna "nome".
Capisco anche che sql è un linguaggio di tipo logico, ma io nn ne conosco a fondo i comandi, le potenzialità ecc ecc quindi nn so proprio che cosa può offrirmi...

Mi spiego meglio facendo un esempio...
Ho una tabella del tipo:

ID  NOME  CODICE  COLORE

4     AA        555          E
5     BB        456          A
6     AA        789          D


Io voglio che mi stampi solo l'id 4 e 5, visto che il 6 ha un nome che si ripete.
ovviamente però vorrei le info di tutte le colonne del prodotto...una stampa di questo tipo:

ID  NOME  CODICE  COLORE

4   AA      555        E
5   BB      456        A


Grazie
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
MaRsHaL ha scritto:
Mi spiego meglio facendo un esempio...


Non c'è bisogno... ho capito quello che vorresti fare, ma continui a non darmi la risposta...

Ho una tabella del tipo:

ID  NOME  CODICE  COLORE

4     AA        555          E
5     BB        456          A
6     AA        789          D


Io voglio che mi stampi solo l'id 4 e 5, visto che il 6 ha un nome che si ripete.
ovviamente però vorrei le info di tutte le colonne del prodotto...una stampa di questo tipo:

ID  NOME  CODICE  COLORE

4   AA      555        E
5   BB      456        A



Allora approfitto del tuo esempio per chiederti: "PER QUALE MOTIVO PER IL NOME "AA" DEVE ESSERE RESTITUITA LA RIGA CON ID 4 E NON L'ALTRA...?"

Grazie


Bye

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.