Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免特定列术语重复的SQL查询_Sql_Sql Server 2008 - Fatal编程技术网

避免特定列术语重复的SQL查询

避免特定列术语重复的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

我希望设计一个查询,在其中我需要在一列中没有重复的不同术语。我使用的是SQLServer2008R2版本

这是我的示例表:

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好吧,这个标准不在最初的问题中-但你是对的,它们不会对应。。其他答案已经在这里,我不需要更新;)