2009-03-06 4 views
0

У меня есть простая проблема с использованием SQL-представлений. На данный момент я просто не могу понять это.Выберите из нескольких таблиц, где есть разные значения

  • У меня есть 2 стола, TableA и TableB.
  • Я хочу получить FieldA в TableA и FieldB в TableB.
  • Две таблицы связаны с помощью INNER JOIN.
  • Мне нужны только строки, где TableA.FieldA различны.
  • Возвращаемые значения должны быть из 10 элементов из TableB.FieldB

Просто с помощью SELECT DISTINCT, как представляется, используя комбинацию из двух полей, чтобы определить различие.

Любые идеи?

Вот макет в SQL в настоящее время возвращаются все строки:

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

Пример данных, возвращаемых из этого стандартного запроса будет:

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

То, что я ищу, чтобы вернулись из запрос будет следующим:

John 78 
Paul 53 
Claire 48 
Sam  16 

** EDITED попытаться сделать вещи немного яснее, и я nclude отсутствующая информация.

+0

Ваша цель не полностью определена, что может быть частью проблемы. Если вам нужна только отдельная FieldA из TableA, какие правила определяют, какой FieldA из TableB вы будете использовать, если существует несколько? –

+0

Возможно, вы захотите определить данные таблицы. то есть первый набор данных FieldB FieldB, это то, что из TableB? И вы хотите, чтобы первая десятка в TableB определялась тем, что? Любой заказ? – achinda99

ответ

1

Если есть два разных значения для поля A в таблице b на основе объединения, как вы узнаете, какой из них использовать?

Вы могли бы попробовать это, но он не может выбрать значение б вы хотите

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

Вам нужен ORDER BY max (dbo.TableB.FieldA) DESC LIMIT 10 тоже? –

0

Как насчет этого?

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

Основываясь на вашем answer я думаю, что вы пытаетесь сделать, это:

Сумма FieldB в TableB, а затем присоединиться к нему с 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 

 Смежные вопросы

  • Нет связанных вопросов^_^