SQL Query为每个页面选择Banner

时间:2018-02-15 08:51:19

标签: sql sql-server

我要求遵循以下事项。

有分配到类别的横幅。 每个类别的横幅都不是动态的。

假设我在一个类别中有100个产品,在该类别中有3个横幅。然后它将如下所示。

第1页:1-10产品和Banner1

第2页:11-20产品和Banner2

第3页:21-30产品和Banner3

第4页:31-40产品和Banner1

第5页:31-40产品和Banner2

第6页:41-50产品和Banner3

即可。

我需要一个查询来在每个页面中选择一个横幅。

任何人都可以帮我实现这个目标吗?

数据库方案供参考

dbo.Category(Id int,CategoryName Varchar(100))

dbo.Product(Id int,ProductName varchar(100),Description varhcar(max),ImageLink varchar(100))

dbo.Category_Product_Mapping(CategoryId int,ProdcutId int)

dbo.Banner(Id int,ImageLink varchar(100),DisplayOrder int,CategoryId int)

1 个答案:

答案 0 :(得分:0)

试试这个,

create table #product (productid int)
    insert into #product values (9),(19),(29)
    ,(39),(49),(59),(69),(79),(89),(99),(100),(111)
    ,(121)

DECLARE @rangesize INT = 10
DECLARE @numberofBanner INT = 3
DECLARE @Margin INT = @rangesize * @numberofBanner

SELECT productid
    ,CASE 
        WHEN productid < @Margin
            THEN (productid / @rangesize) + 1
        ELSE (productid / @rangesize) % @numberofBanner + 1
        END bannerid
FROM #product

DROP TABLE #product

或者,您可以创建一个临时表,如下所示

    create table #bannerrange (FromID int,ToID int,Bannerid int)
    --then join with product table

    drop table #product