SQL-запрос для предотвращения любого повторения для определенных условий столбца - PullRequest
0 голосов
/ 29 февраля 2012

Я хочу разработать запрос, в котором мне нужны DISTINCT термины в столбце без повторений. Я использую выпуск SQL Server 2008 R2.

Вот мой пример таблицы:

id  bank_code   bank_name   interest_rate
----------------------------------------------------------
1   123         abc         3.5
2   456         xyz         3.7
3   123         abc         3.4
4   789         pqr         3.3
5   123         abc         3.6
6   456         xyz         3.1

Что мне нужно, так это отсортировать таблицу по убыванию по столбцу «проценты», но без повторения терминов в «коде банка».

Вот что я хочу:

id  bank_code   bank_name   interest_rate
----------------------------------------------------------
2   456         xyz         3.7 
5   123         abc         3.6
4   789         pqr         3.3

Я пробовал оператор DISTINCT, но он выбирает уникальную комбинацию всех столбцов, а не один столбец для повторения. Вот что я делаю, что явно не принесет мне того, чего я хочу:

SELECT DISTINCT TOP 5 [ID], [BANK_CODE]
      ,[BANK_NAME]
      ,[INTEREST_RATE]
  FROM [SAMPLE]
  ORDER BY [INTEREST_RATE] DESC

Есть ли способ достичь этого? Любая помощь приветствуется.

Ответы [ 4 ]

5 голосов
/ 29 февраля 2012
;WITH x AS 
(
    SELECT id,bank_code,bank_name,interest_rate,
      rn = ROW_NUMBER() OVER (PARTITION BY bank_code ORDER BY interest_rate DESC)
    FROM dbo.[SAMPLE]
)
SELECT id,bank_code,bank_name,interest_rate
FROM x WHERE rn = 1
ORDER BY interest_rate DESC;
2 голосов
/ 29 февраля 2012

Попробуйте использовать аналитические функции:

;WITH CTE AS 
(
    SELECT *, ROW_NUMBER() OVER(PARTITION BY bank_code ORDER BY interes_rate DESC) Corr
    FROM [Sample]
)
SELECT id, bank_code, banck_name, interest_rate
FROM CTE 
WHERE Corr = 1
1 голос
/ 29 февраля 2012

не уверен насчет синтаксиса [], но вам, вероятно, нужно что-то вроде этого:

SELECT min([ID]), [BANK_CODE], [BANK_NAME], max([INTEREST_RATE])
FROM [SAMPLE]
GROUP BY [BANK_CODE], [BANK_NAME]
ORDER BY 4 DESC
0 голосов
/ 29 февраля 2012

Как насчет этого? Это просто, но будет дублировать, если у вас есть одинаковые процентные ставки.

select ID, #sample.Bank_code, bank_name, #sample.interest_Rate
from #sample
join  
(
   SELECT [BANK_CODE], MAX(interest_rate) as interest_Rate
   FROM #sample
   GROUP BY bank_code
) as groupingtable
    on groupingtable.bank_code = #sample.bank_code 
        and groupingtable.interest_Rate = #sample.interest_rate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...