Выберите из нескольких таблиц, где есть разные значения - PullRequest
0 голосов
/ 06 марта 2009

У меня есть простая проблема с использованием представлений SQL. Я просто не могу понять это в данный момент.

  • У меня есть 2 таблицы, Таблица A и Таблица B.
  • Я хочу получить FieldA в TableA и поле B в таблице B.
  • Две таблицы связаны с помощью ВНУТРЕННЕЕ СОЕДИНЕНИЕ.
  • Я хочу только строки, где 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

** Отредактировано, чтобы попытаться сделать вещи более понятными и включить недостающую информацию.

Ответы [ 3 ]

1 голос
/ 08 марта 2009

На основании вашего ответа Я думаю, что вы пытаетесь сделать следующее:

Суммируйте поле B в таблице B, а затем соедините его с таблицей A.

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
1 голос
/ 06 марта 2009

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

Вы можете попробовать это, но он не может выбрать желаемое значение 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 голосов
/ 06 марта 2009

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

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
...