使用NextID和PrevID在表中显示记录

时间:2017-07-28 08:23:28

标签: sql-server sql-server-2008

我在quotestable中有以下几个字段:quotesid是主键

 ┌──────────┬────────────┬────────────────────────────────────────────┐
 │ QuotesID │ QuotesDesc │ QuotesTags                                 │
 ├──────────┼────────────┼────────────────────────────────────────────┤
 │ 75       │ Quotes 1   │ Leadership, Integrity, Values              │
 │ 100      │ Quotes 2   │ Leadership, Faith                          │
 │ 102      │ Quotes 3   │ HeartPower, Motivation, Leadership         │
 │ 105      │ Quotes 4   │ Mercy, Power, Military, Leadership         │
 │ 209      │ Quotes 5   │ Compassion, Confidence, Leadership, Family │
 └──────────┴────────────┴────────────────────────────────────────────┘

我有一个像select * from quotestable where contains (QuotesTags, 'Leadership')

这样的查询

我的要求是在我的网页上,如果我显示报价为quoteid = 102,我希望接下来的3个报价显示在iframe中。即,105,209,75

如果我的网页显示引号= 209我希望接下来的3个引号为75,100,102(如果它从头开始结束)

此外,我需要两个额外的列,它们将在结果查询中具有NextQuoteID和PrevQuoteID,这将指向下一个和前一个引号。我不知道如何在最终查询中添加这两个额外的列。

我使用的是sql-server 2008 r2版本。

1 个答案:

答案 0 :(得分:1)

仅回答SQL Server 2012 +

在此答案发布后2小时我们才知道它是SQL Server 2008。 如果有人受到打扰,可以通过子查询来完成。 我不是因为我不知道答案需要什么版本

SELECT TOP 4
    QuotesID = SortQuotesID % 1000000, 
    QuotesDesc, QuotesTags,
    NextQuoteID = (LEAD(SortQuotesID) OVER (ORDER BY SortQuotesID))% 1000000,
    PrevQuoteID = (LEAG(SortQuotesID) OVER (ORDER BY SortQuotesID))% 1000000
FROM
    (
    select SortQuotesID = QuotesID, QuotesDesc, QuotesTags                                 
    from quotestable where contains (QuotesTags, 'Leadership')
    UNION ALL
    select SortQuotesID = QuotesID+1000000, QuotesDesc, QuotesTags                                 
    from quotestable
    ) X
ORDER BY 
    SortQuotesID