T-SQL查询: TOP N [PERCENT] WITH TIES ORDER BY 顺序排序实例

USE tempdb
GO

--	DROP TABLE #TEST
CREATE TABLE #TEST(DEPTNAME VARCHAR(50),AMOUNT INT)

INSERT INTO #TEST(DEPTNAME,AMOUNT)
VALUES
	('销售1部',99),
	('销售2部',100),
	('销售3部',86),
	('销售4部',100),
	('销售5部',86),
	('销售6部',100),
	('销售7部',200),
	('销售8部',88),
	('销售9部',200),
	('销售10部',56)

SELECT * FROM #TEST ORDER BY AMOUNT DESC

-- 【问题: 查询业绩最好的前3个部门?】



--错误方法一:
SELECT TOP 3 * FROM #TEST ORDER BY AMOUNT DESC
/*
DEPTNAME	AMOUNT
销售7部	200
销售9部	200
销售4部	100
*/

--这样求解似乎是正确的,但是销售额100(W)的有3个部门是并列的,应该包括进去!



--错误方法二:

SELECT * FROM (
	SELECT DENSE_RANK()OVER(ORDER BY AMOUNT DESC) AS ID,* FROM #TEST
) T WHERE ID <= 3

/*
ID	DEPTNAME	AMOUNT
1	销售7部	200
1	销售9部	200
2	销售6部	100
2	销售2部	100
2	销售4部	100
3	销售1部	99
*/

--问题只要前3名,但是 “销售1部” 99(W)已属于第6名了,不应包括!




--	应要求结果应如下所示:
/*
DEPTNAME	AMOUNT
销售7部	200
销售9部	200
销售6部	100
销售2部	100
销售4部	100
*/


/*******************解决**********************/


--	方法一:常用的一种方法

SELECT * FROM (
	SELECT RANK()OVER(ORDER BY AMOUNT DESC) AS ID,* FROM #TEST
) T WHERE ID <= 3



--	方法二:用【WITH TIES】	
SELECT TOP 3 WITH TIES * FROM #TEST ORDER BY AMOUNT DESC



--	【WITH TIES】参考:http://msdn.microsoft.com/zh-cn/library/ms189463.aspx

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值