Возвращает максимальное значение нескольких связанных строк и включает данные из другой таблицы (SQL Server 2005) - PullRequest
1 голос
/ 14 марта 2011

Мне нужно вернуть данные из двух таблиц - одна таблица содержит записи на уровне один-к-одному (TableB), а другая содержит записи на уровне один-ко-многим (TableA). Из таблицы «один ко многим» я хочу вернуть только одну строку для каждого уникального CustomerAccountNumber, и я хочу основать критерии, по которым запись из таблицы «один к одному» имеет наибольшее значение DollarAmount. Поэтому, несмотря на то, что связью между таблицами является RequestNumber, меня больше всего интересует столбец CustomerAccountNumber (в результатах даже не требуется RequestNumber).

Просто с трудом справляюсь с логикой, необходимой для достижения желаемого результата. Я искал некоторые другие вопросы о функции max (), но не смог найти ничего, что бы соответствовало тому, что я ищу. Это мой первый пост здесь, поэтому я открыт для любых конструктивных отзывов о моем предварительном поиске и / или структурировании вопроса:)

Пример данных

Таблица A: один ко многим

RequestNumber    CustomerAccountNumber
12345            987456
54321            987456
32145            987456

Таблица B: один к одному

RequestNumber    DollarAmount
12345            13000
54321            15000
32145            17000

Желаемый результат после запроса (с 32145, имеющим самое высокое значение DollarAmount

CustomerAccountNumber    DollarAmount
987456                   17000

1 Ответ

2 голосов
/ 14 марта 2011
SELECT  customerAccountNumber, dollarAmount
FROM    (
        SELECT  *,
                ROW_NUMBER() OVER (PARTITION BY customerAccountNumber ORDER BY dollarAmount DESC) rn
        FROM    tableA a
        JOIN    tableB b
        ON      b.requestNumber = a.requestNumber
        ) q
WHERE   rn = 1
...