ВЫБЕРИТЕ запись МАКСИМАЛЬНЫМ из другого столбца, а другую запись - двоичной переменной в операторе GROUP BY - SQL Server - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь получить описание доминирующего платежа для учетной записи на основе максимального значения его платежа и его ставки на основе переменной индикатора Rate_Include в SQL Server.Поскольку я относительно новичок в SQL Server, мне интересно, может ли кто-нибудь помочь мне с этим запросом.Я попытался использовать имеющее и внутреннее соединение, но эта проблема немного сложнее.

Это для SSMS Studio 17. Таблица называется Payment.

Исходная таблица указана какследует.

Payment

Ожидаемый результат:

Aggregated Results

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

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

Обратите внимание, что это было написано очень быстро и не оптимизировано. Я предлагаю вам продолжить изучение JOINS и подзапросов и, возможно, попробовать другие подходы.

            SELECT p.Account_Number,
                   SUM(p.Payment_Amount) AS Payment_Amount,
                   sub2.Payment_Description,
                   sub3.Rate
            FROM Payment p

            JOIN (SELECT Account_Number,
                              MAX(Payment_Amount) AS Payment_Amount
                       FROM Payment
                       GROUP BY Account_Number) sub ON p.Account_Number = sub.Account_Number

            JOIN (SELECT Account_Number,
                              Payment_Amount,
                              Payment_Description
                       FROM Payment) sub2 ON sub.Account_Number = sub2.Account_Number AND sub.Payment_Amount = sub2.Payment_Amount

            JOIN (SELECT Account_Number,
                              MAX(Rate) AS Rate
                       FROM Payment WHERE Rate_Included = 'Y'
                       GROUP BY Account_Number) sub3 ON sub.Account_Number = sub3.Account_Number

            GROUP BY p.Account_Number,
                     Sub2.Payment_Description,
                     sub3.Rate
0 голосов
/ 21 мая 2019

Следующий запрос будет полезным.

SELECT ACCOUNT_NUMBER, SUM(Payment_Amount)  Payment_Amount, '' Dominant_Payment, 0.00 
Rate, MAX(Payment_Amount) MaxPayment
INTO #PAYMENTS
FROM Payments
GROUP BY ACCOUNT_NUMBER

--Updating Dominant_Payment
UPDATE TP  SET Dominant_Payment = P.Payment_Description
FROM Payments P 
JOIN #PAYMENTS TP ON P.ACCOUNT_NUMBER = TP.ACCOUNT_NUMBER AND P.Payment_Amount = 
TP.MaxPayment
--Updating Rate
UPDATE TP  SET Rate = P.Rate
FROM Payments P 
JOIN #PAYMENTS TP ON P.ACCOUNT_NUMBER = TP.ACCOUNT_NUMBER AND P.Rate_Include = 'Y'

SELECT ACCOUNT_NUMBER, Payment_Amount, Dominant_Payment, Rate
FROM #PAYMENTS

DROP TABLE #PAYMENTS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...