2012-08-13 19 views
16

Sto cercando di scrivere una query SQL che seleziona più colonne da una tabella con l'operatore distinto su una sola colonna.Query SQL più colonne che utilizzano distinto solo su una colonna

Il tavolo è semplice. Le colonne sono:

tblFruit_ID, tblFruit_FruitType, tblFruit_FruitName 
int   NVarChar   Text 

sto cercando di selezionare tutto il tblFruit_FruitType con il loro corrispondente tblFruit_ID.

ho provato:

Select Distinct(tblFruit_FruitType), tblFruit_ID FROM tblFruit 

I ritorni tutti i risultati, non solo distinte

Select tblFruit_FruitType, tblFruit_ID FROM tblFruit Group By tblFruit_FruitType 

-Errors con Colonna tblFruit_ID è valida nell'elenco di selezione perché non è contenuta in entrambi un aggregato funzione o la clausola GROUP BY.

Select tblFruit_FruitType, tblFruit_ID FROM tblFruit Group By tblFruit_FruitType, tblFruit_ID 

I ritorni tutti i risultati, non solo distinte

Inoltre ho verificato questi posti simili e non sono riuscito a ottenere nulla per funzionare :(

mySQL select one column DISTINCT, with corresponding other columns

SQL Server Distinct Union for one column

Speriamo questo è abbastanza informazioni per una risposta

Grazie per il tuo tempo!

EDIT (dati di esempio e risultati desiderati)

tblFruit_ID, tblFruit_FruitType, tblFruit_FruitName 
int   NVarChar   Text 
1   Citrus    Orange 
2   Citrus    Lime 
3   Citrus    Lemon 
4   Seed    Cherry 
5   Seed    Banana 

Risultati:

1   Citrus 
4   Seed 
+0

Messaggio dati di esempio e risultati desiderati, per favore. –

risposta

24
select * from tblFruit where 
tblFruit_ID in (Select max(tblFruit_ID) FROM tblFruit group by tblFruit_FruitType) 
+0

Questa query restituisce le righe corrette con i risultati. Si prega di consultare la risposta di seguito per ulteriori spiegazioni su ciò che sta accadendo! – Steve

+0

La risposta qui sotto funziona anche per produrre i risultati desiderati. – Steve

+0

Grazie! Ha aiutato molto – MaxG

17

È necessario utilizzare una funzione di aggregazione sulle colonne contro il quale non si raggruppamento. In questo esempio, ho scelto arbitrariamente la funzione Min. Stai combinando le righe con lo stesso valore FruitType. Se ho due righe con lo stesso valore FruitType ma diversi valori Fruit_Id per esempio, che cosa dovrebbe fare il sistema?

Select Min(tblFruit_id) As tblFruit_id 
    , tblFruit_FruitType 
From tblFruit 
Group By tblFruit_FruitType 

SQL Fiddle example

+0

Bello. Grazie mille. Questo ha funzionato perfettamente e in realtà capisco cosa fa tutto ora. Vorrei poter votare più di una volta. – Steve

+0

Nota: in questa query Min (tblFruit_id) e Min (tblFruit_FruitName) possono provenire da righe diverse (diversi tipi di frutta) – valex

+0

Sei corretto. La query fornisce gli stessi risultati desiderati ma restituisce valori da altre righe. – Steve

0

avevo bisogno di fare lo stesso e ha dovuto interrogare una query per ottenere il risultato

ho impostato la mia prima query fino a portare in tutti gli ID dalla tabella e tutte le altre informazioni necessarie per filtrare:

SELECT tMAIN.tLOTS.NoContract, tMAIN.ID 
FROM tMAIN INNER JOIN tLOTS ON tMAIN.ID = tLOTS.id 
WHERE (((tLOTS.NoContract)=False)); 

Salva questo come Q04_1 -0 questo returne d 1229 risultati (ci sono 63 record univoci per interrogare - soime con più lotti)

SELECT DISTINCT ID 
FROM q04_1; 

salvati come q04_2

Ho quindi scritto un'altra query che ha portato le informazioni richieste legate al ID

SELECT q04_2.ID, tMAIN.Customer, tMAIN.Category 
FROM q04_2 INNER JOIN tMAIN ON q04_2.ID = tMAIN.ID; 

Ha funzionato a meraviglia e mi ha fornito esattamente ciò di cui avevo bisogno: 63 record unici restituiti con i dettagli di clienti e categorie.

Ecco come ho lavorato intorno ad esso come non ho potuto ottenere il Gruppo Lavorando a tutti - anche se io sono un po ' "wet dietro le orecchie" weith SQL (così si prega di essere gentile e costruttivo con feedback)

Problemi correlati