web-dev-qa-db-fra.com

Requête SQL sur plusieurs colonnes en utilisant distinct sur une seule colonne

J'essaie d'écrire une requête SQL qui sélectionne plusieurs colonnes d'une table avec l'opérateur distinct sur une seule colonne.

La table est simple. Les colonnes sont:

tblFruit_ID, tblFruit_FruitType, tblFruit_FruitName
int          NVarChar            Text

J'essaie de sélectionner tous les tblFruit_FruitType avec leur tblFruit_ID correspondant.

J'ai essayé:

Select Distinct(tblFruit_FruitType), tblFruit_ID FROM tblFruit

-Retourne tous les résultats, pas seulement distincts

Select tblFruit_FruitType, tblFruit_ID FROM tblFruit Group By tblFruit_FruitType

-Errors avec Column tblFruit_ID n'est pas valide dans la liste de sélection car il ne figure ni dans une fonction d'agrégat ni dans la clause GROUP BY.

Select tblFruit_FruitType, tblFruit_ID FROM tblFruit Group By tblFruit_FruitType, tblFruit_ID

-Retourne tous les résultats, pas seulement distincts

J'ai également vérifié ces messages similaires et ne pouvais rien faire fonctionner :(

MySQL sélectionne une colonne DISTINCT, avec les autres colonnes correspondantes

SQL Server Distinct Union pour une colonne

Espérons que cela soit suffisant pour une réponse.

Merci pour votre temps!

EDIT (exemple de données et résultats souhaités)

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

Résultats:

1            Citrus
4            Seed
20
Steve
select * from tblFruit where
tblFruit_ID in (Select max(tblFruit_ID) FROM tblFruit group by tblFruit_FruitType)
28
valex

Vous devez utiliser une fonction d'agrégat sur les colonnes avec lesquelles vous ne regroupez pas. Dans cet exemple, j'ai arbitrairement choisi la fonction Min. Vous combinez les lignes avec la même valeur FruitType. Si j'ai deux lignes avec la même valeur FruitType mais des valeurs Fruit_Id différentes par exemple, que doit faire le système? 

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

Exemple SQL Fiddle

21
Thomas
select * from 
(select 
ROW_NUMBER() OVER(PARTITION BY tblFruit_FruitType ORDER BY tblFruit_FruitType DESC) as tt
,*
from tblFruit
) a
where a.tt=1
0
Muhammed salem

Je devais faire la même chose et je devais interroger une requête pour obtenir le résultat

J'ai configuré ma première requête pour importer tous les identifiants de la table et toutes les autres informations nécessaires pour filtrer:

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

Enregistrer ceci sous Q04_1 -0, il a renvoyé 1229 résultats (il y a 63 enregistrements uniques à interroger - soime avec plusieurs LOT)

SELECT DISTINCT ID
FROM q04_1;

Enregistré sous q04_2

J'ai ensuite écrit une autre requête qui apportait les informations requises liées à l'ID

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

Travaillé un traitement et m'a obtenu exactement ce dont j'avais besoin - 63 enregistrements uniques retournés avec les détails du client et de la catégorie.

C’est ainsi que j’ai travaillé à ce sujet car je ne pouvais pas obtenir le groupe. En travaillant du tout, même si je suis plutôt "mouillé derrière les oreilles" avec SQL (veuillez donc être doux et constructif avec vos commentaires)

0
Marcus Black