在SQL Server中从“重复记录+非重复记录中仅选择1条记录” [英] Select Only 1 Record From Duplicate Records + Non-Duplicate Records In SQL Server

查看:101
本文介绍了在SQL Server中从“重复记录+非重复记录中仅选择1条记录”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,



我在SQL中有一个表,我想要检索里面的所有记录。表格中有许多列,如NAME,IDENTIFIER,TOTAL。假设这个表有6条记录,如果IDENTIFIER列下有重复值,我想检索那些重复记录中的前1个和其他非重复记录。



例如

**目前SQL中的表格:**



----------------- -----------------------------------------------



NAME |标识符|总计



ab | 110011 | 10



cd | 110011 | 20



ef | 110012 | 30



gh | 110013 | 40



ij | 110014 | 50



kl | 110015 | 60



--------------------------------- -------------------------------

110011的IDENTIFIER重复,但我想找回一个那些记录。



**我想达到的输出:**



------- -------------------------------------------------- -------



NAME |标识符|总计



ab | 110011 | 10



ef | 110012 | 30



gh | 110013 | 40



ij | 110014 | 50



kl | 110015 | 60



--------------------------------- -------------------------------



请帮帮我在此,谢谢!

hi all,

I have a table in SQL where I want to retrieve all records inside. There are many columns inside the table like NAME, IDENTIFIER, TOTAL. Let's say this table has 6 records, if there is duplicate value under IDENTIFIER column, I want to retrieve the top 1 of those duplicate records + the other non-duplicate records.

For e.g.
**Table in SQL currently:**

----------------------------------------------------------------

NAME | IDENTIFIER | TOTAL

ab | 110011 | 10

cd | 110011 | 20

ef | 110012 | 30

gh | 110013 | 40

ij | 110014 | 50

kl | 110015 | 60

----------------------------------------------------------------
IDENTIFIER of 110011 is repeated but I want to retrieve one of those record.

**The output I want to achieve:**

----------------------------------------------------------------

NAME | IDENTIFIER | TOTAL

ab | 110011 | 10

ef | 110012 | 30

gh | 110013 | 40

ij | 110014 | 50

kl | 110015 | 60

----------------------------------------------------------------

Please help me on this, thanks!

推荐答案

如果是SQL Server,您可以使用 RANK() 来完成你的工作。

尝试类似的事情 -

If it is SQL Server, you can use RANK() to do your job.
Try something like-
SELECT [NAME],IDENTIFIER,TOTAL
FROM
(
	SELECT [NAME],IDENTIFIER,TOTAL,RANK() OVER (PARTITION BY IDENTIFIER ORDER BY TOTAL) AS SlNo
	FROM YourTable
) AS T
WHERE SlNo=1




示例:



EXAMPLE:

SELECT [NAME],IDENTIFIER,TOTAL
FROM
(
	SELECT [NAME],IDENTIFIER,TOTAL,RANK() OVER (PARTITION BY IDENTIFIER ORDER BY TOTAL) AS SlNo
	FROM
	(
		SELECT 'ab' [NAME], 110011 IDENTIFIER, 10 TOTAL
		UNION ALL
		SELECT 'cd', 110011, 20
		UNION ALL
		SELECT 'ef', 110012, 30
		UNION ALL
		SELECT 'gh', 110013, 40
		UNION ALL
		SELECT 'ij', 110014, 50
		UNION ALL
		SELECT 'kl', 110015, 60
	) AS T1
) AS T2
WHERE SlNo=1





希望,它有帮助:)



Hope, it helps :)


你可以检查DISTINCT关键字。
You can check DISTINCT keyword.


这篇关于在SQL Server中从“重复记录+非重复记录中仅选择1条记录”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆