避免特定列术语重复的SQL查询
我希望设计一个查询,在其中我需要在一列中没有重复的不同术语。我使用的是SQLServer2008R2版本 这是我的示例表:避免特定列术语重复的SQL查询,sql,sql-server-2008,Sql,Sql Server 2008,我希望设计一个查询,在其中我需要在一列中没有重复的不同术语。我使用的是SQLServer2008R2版本 这是我的示例表: id bank_code bank_name interest_rate ---------------------------------------------------------- 1 123 abc 3.5 2 456 xyz 3.7 3 123 abc
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
SELECT DISTINCT TOP 5 [ID], [BANK_CODE]
,[BANK_NAME]
,[INTEREST_RATE]
FROM [SAMPLE]
ORDER BY [INTEREST_RATE] DESC
我一直在尝试DISTINCT操作符,但它选择所有列的唯一组合,而不是单个列进行重复。
以下是我正在做的事情,这显然无法满足我的需求:
id bank_code bank_name interest_rate
----------------------------------------------------------
2 456 xyz 3.7
5 123 abc 3.6
4 789 pqr 3.3
SELECT DISTINCT TOP 5 [ID], [BANK_CODE]
,[BANK_NAME]
,[INTEREST_RATE]
FROM [SAMPLE]
ORDER BY [INTEREST_RATE] DESC
有没有办法做到这一点?
感谢您的帮助。尝试使用分析功能:
;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;
;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
不确定
[]
语法,但您可能需要以下内容:
SELECT min([ID]), [BANK_CODE], [BANK_NAME], max([INTEREST_RATE])
FROM [SAMPLE]
GROUP BY [BANK_CODE], [BANK_NAME]
ORDER BY 4 DESC
像这样的怎么样。这很简单,但如果利率相同,就会重复
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
您需要决定选择利率的依据,根据您的结果,它看起来像是给定银行代码/银行名称的最高利率。但是ID似乎不符合这一点,因此您可以解释ID选择的逻辑吗?ID对应于已选择/排序的记录。我不想对ID列进行排序(或执行任何其他操作)。abc的结果行不遵循该规则。abc for 3.6的id为5。@Andrew是对的-结果的第二行应该显示id=5,而不是id=1。如果你不关心ID,那么也许你不应该麻烦把它包括在结果中?哦,我的糟糕!现在编辑!这不会产生正确的结果,ID和利率将不对应。我不知道分组是否在这里。。。首先,它可能会混淆其中两列,因为最高利率不一定与最低ID匹配。另外,如果有两种情况下利率相同,该怎么办?您将返回两行。另外,请不要使用“订购人”。。。这是非常脆弱的(见)。如果您为列指定别名(您应该这样做),则可以引用别名,而不是当前列在结果集中的位置。它不是我的,您可以编写所需的任何别名,并按顺序使用它们,并且
max()
是一个组函数,无论有多少行具有相同的最大值,它都将返回1行value@deathApril-它仍然可以为最大利息选择错误的Id_rate@Andrew好吧,这个标准不在最初的问题中-但你是对的,它们不会对应。。其他答案已经在这里,我不需要更新;)