我在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版本。
答案 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