2009-03-06 7 views
0

J'ai un problème simple ici en utilisant les vues SQL. Je ne peux pas sembler me débrouiller pour le moment.Sélectionner parmi plusieurs tables où l'on a des valeurs distinctes

  • J'ai 2 tables, TableA et TableB.
  • Je souhaite récupérer FieldA dans le tableau A et FieldB dans la table B. Les deux tables sont liées à l'aide d'un INNER JOIN .
  • Je ne veux que les lignes où TableA.FieldA sont distinctes.
  • Les valeurs retournées doivent être des 10 articles de TableB.FieldB

simplement en utilisant SELECT DISTINCT semble utiliser la combinaison des deux champs pour déterminer la distinction.

Des idées?

Voici une maquette du SQL retour actuellement toutes les lignes:

SELECT dbo.TableA.FieldA, dbo.TableB.FieldB 
FROM dbo.TableA INNER JOIN dbo.TableB ON dbo.TableA.ID = dbo.TableB.TableAID 

Un exemple de données renvoyées par cette requête standard serait:

FieldA FieldB 
John 78 
John 21 
Claire 18 
Sam  16 
John 25 
Claire 48 
Paul 53 

Ce que je cherche à être retourné de la requête serait:

John 78 
Paul 53 
Claire 48 
Sam  16 

** EDITED pour essayer de rendre les choses un peu plus claires et je nclude l'information manquante.

+0

Votre objectif n'est pas entièrement défini, ce qui peut être une partie du problème. Si vous voulez seulement un champ distinct de la TableA, quelles règles déterminent quel FieldA de TableB vous utiliserez s'il en existe plusieurs? –

+0

Vous voudrez peut-être définir vos données de table. c'est-à-dire que le premier ensemble de données, FieldA FieldB, est celui de TableB? Et vous voulez que le top dix de la TableB soit défini par quoi? Aucun ordre? – achinda99

Répondre

1

S'il existe deux valeurs différentes pour le champ A dans la table b en fonction de la jointure, comment sauriez-vous lequel utiliser?

Vous pouvez essayer cela, mais il peut ne pas choisir la valeur b vous voulez

SELECT dbo.TableA.FieldA, max(dbo.TableB.FieldA) 
FROM dbo.TableA INNER JOIN dbo.TableB ON dbo.TableA.SomeID = dbo.TableB.SomeID 
GROUP BY dbo.TableA.FieldA 
+0

Avez-vous besoin de ORDER BY max (dbo.TableB.FieldA) DESC LIMIT 10 aussi? –

0

Comment cela?

SELECT TableA.FieldA, 
     tmp.FieldB 
FROM TableA 
     INNER JOIN 
       (SELECT TableAID, 
         FieldB 
       FROM  TableB 
       GROUP BY FieldA 
       ORDER BY FieldB DESC 
      ) AS tmp 
     ON  TableA.ID = tmp.TableAID 
ORDER BY tmp.FieldB DESC 
1

Basé sur votre answer Je pense que ce que vous essayez de faire est la suivante:

Somme FieldB dans TableB puis rejoindre avec TableA.

SELECT TableA.FieldA, 
     tmp.SUMFieldB 
FROM  TableA 
     INNER JOIN 
        (SELECT TableAID, 
          SUM(FieldB) AS SUMFieldB 
        FROM  TableB 
        GROUP BY FieldA 
        ORDER BY SUMFieldB DESC 
       ) AS tmp 
     ON  TableA.ID = tmp.TableAID 
ORDER BY tmp.SUMFieldB DESC 
Questions connexes