Question

Mon patron m'a confié une mission que je ne suis pas sûre de possible, car après environ deux semaines, je ne peux pas trouver de solution. Je lance donc ceci pour demander une aide quelconque de la part du responsable de la sécurité. groupe. Si cela vous casse la tête, je vous présente mes excuses.

Un peu d’arrière-plan: nous développons une application d’interrogation de base de données qui permet aux utilisateurs de récupérer tout ce qu’ils veulent de la base de données sans avoir à connaître le code SQL.

Mon problème: nous souhaitons personnaliser un " Distinct " la sélection est utilisée. Au lieu d'appliquer le mot-clé distinct aux lignes sélectionnées, nous souhaitons qu'il ne s'applique qu'à certains champs, afin que les premières lignes correspondant aux champs soient utilisées. Pour un exemple:

Bob Jones, 122, rue principale, Portland, OR
Sue Jones, 122, rue principale, Portland, OR
Mary Smith, 458, 32e rue, Portland, OR
Ralph Smith, 458 32nd Street, Portland, OR

nous voulons que cela fonctionne afin que seules les premières lignes de chaque adresse soient renvoyées, comme suit:

Bob Jones, 122, rue principale, Portland, OR
Mary Smith, 458 32nd Street, Portland, OR

Avec le signe distinctif normal, les quatre lignes seraient renvoyées, ce qui est plus que ce que nous voulons. Quelqu'un a-t-il une idée de la manière dont nous pouvons y parvenir? Merci.

Était-ce utile?

La solution

WITH NumberedRows AS (
   SELECT FirstName, LastName, Address,
          ROW_NUMBER() OVER (PARTITION BY Address ORDER BY Id) as RowNumber
   FROM Table
) SELECT FirstName, LastName, Address
  FROM NumberedRows
  WHERE RowNumber = 1;

PARTITION BY Adresse spécifie la liste de colonnes à regrouper, et ORDER BY ID indique la liste de colonnes dans laquelle vous définissez le " premier " article avec.

(Assurez-vous que l'instruction précédente est terminée par un point-virgule.)

Autres conseils

Vous devez exécuter une opération régulière "SELECT DISTINCT". Instruction SQL qui demande que seules les requêtes concernant les champs doivent être distinctes. Ensuite, une fois que vous les avez récupérées, exécutez une autre requête prenant l'enregistrement TOP 1 contenant les données correspondantes pour obtenir les champs non distincts. Pour le moment, je ne vois pas le moyen de faire cela dans une seule instruction SQL ...

SELECT MIN (a.nom + a.nom), adresse de x groupe par adresse.

C'est une réponse trop simpliste, mais cela vous permet de faire passer votre message. il retournera seulement le "moins" " nom pour chaque adresse distincte.

Vous devrez également utiliser la concaténation de champs pour faire les distinctions, mais cela vous donnera ce dont vous avez besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top