SQL Query用于避免特定列术语的任何重复

时间:2012-02-29 18:20:19

标签: sql sql-server-2008

我希望设计一个查询,其中我需要列中的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

我想要的是,对'interest_rates'列下降的表进行排序,但不要重复'bank_code'中的术语。

这就是我想要的:

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 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

尝试使用分析功能:

;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

答案 2 :(得分:1)

不确定[]语法,但您可能需要这样的内容:

SELECT min([ID]), [BANK_CODE], [BANK_NAME], max([INTEREST_RATE])
FROM [SAMPLE]
GROUP BY [BANK_CODE], [BANK_NAME]
ORDER BY 4 DESC

答案 3 :(得分:0)

这样的事情怎么样?这很简单,但如果您的利率相同,则会重复。

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