Sql 如何使用秩/连接以及在何处连接
我在代码中使用了多个内部联接,并提供了秩,但现在我想选择一个特定的秩。那么如何在where语句中使用rank呢 这是我的代码,但现在请帮助我继续:Sql 如何使用秩/连接以及在何处连接,sql,sql-server,Sql,Sql Server,我在代码中使用了多个内部联接,并提供了秩,但现在我想选择一个特定的秩。那么如何在where语句中使用rank呢 这是我的代码,但现在请帮助我继续: select [YEAR], [IDManufacturer], sum([TotalPrice]), rank() over (order by sum(totalprice) desc) as sales_rank from [dbo].[DIM_DATE] join [d
select [YEAR],
[IDManufacturer],
sum([TotalPrice]),
rank() over (order by sum(totalprice) desc) as sales_rank
from [dbo].[DIM_DATE]
join [dbo].[FACT_TRANSACTIONS]
on [dbo].[FACT_TRANSACTIONS].Date = [dbo].[DIM_DATE].DATE
join [dbo].[DIM_MODEL]
on [dbo].[DIM_MODEL].IDModel=[dbo].[FACT_TRANSACTIONS].IDModel
where [YEAR] in (2009,2010)
group by IDManufacturer,[year]
order by sum([TotalPrice]) desc
现在我只想选择排名3和4。如何做到这一点?如果您只想要排名3和4,请尝试以下方法:
select * from (
select [YEAR],
[IDManufacturer],
sum([TotalPrice]),
rank() over (order by sum(totalprice) desc) as sales_rank
from [dbo].[DIM_DATE]
join [dbo].[FACT_TRANSACTIONS]
on [dbo].[FACT_TRANSACTIONS].Date = [dbo].[DIM_DATE].DATE
join [dbo].[DIM_MODEL]
on [dbo].[DIM_MODEL].IDModel=[dbo].[FACT_TRANSACTIONS].IDModel
where [YEAR] in (2009,2010)
group by IDManufacturer,[year]
order by sum([TotalPrice]) desc
) t where sales_rank in (3,4)
您可以执行
子查询
或CTE
,我建议您尝试使用两种方法,并查看执行计划选择哪种执行效果更好:
子查询
SELECT * FROM
(select [YEAR],
[IDManufacturer],
sum([TotalPrice]) TotalPrice,
rank() over (order by sum(totalprice) desc) as sales_rank
from [dbo].[DIM_DATE]
join [dbo].[FACT_TRANSACTIONS]
on [dbo].[FACT_TRANSACTIONS].Date = [dbo].[DIM_DATE].DATE
join [dbo].[DIM_MODEL]
on [dbo].[DIM_MODEL].IDModel=[dbo].[FACT_TRANSACTIONS].IDModel
where [YEAR] in (2009,2010)
group by IDManufacturer,[year]
) as SQ
Where sales_rank = 3 or sales_rank = 4
go
通用表表达式
; with CTE as
(select [YEAR],
[IDManufacturer],
sum([TotalPrice]) TotalPrice,
rank() over (order by sum(totalprice) desc) as sales_rank
from [dbo].[DIM_DATE]
join [dbo].[FACT_TRANSACTIONS]
on [dbo].[FACT_TRANSACTIONS].Date = [dbo].[DIM_DATE].DATE
join [dbo].[DIM_MODEL]
on [dbo].[DIM_MODEL].IDModel=[dbo].[FACT_TRANSACTIONS].IDModel
where [YEAR] in (2009,2010)
group by IDManufacturer,[year]
)
SELECT * FROM CTE WHERE sales_rank = 3 or sales_rank = 4
如果您只需要第3和第4个值,并且假设没有关联,则使用
offset/fetch
:
offset 2 rows fetch first 2 rows only
偏移量2
是因为偏移量从0
开始计数,而不是从1
开始计数