0

我有一个显示过滤记录的网格视图,也就是说,主键有间隙ID

过滤器通常应用于 3 列:

dev_ID (nvarchar)
date
code_ID (nvarchar)

和一个随机的第 4 列,在下一个查询中不会被过滤。

选择gridview记录时,

我想返回DB并获取选中gridview记录前后的10条记录

PK在这种情况下,我可以从 开始)。

这些记录可能仍然在主键和其他因素上NOT是连续的,ID

之前可能没有 10 条记录,之后可能没有 10 条记录。

新查询应返回所选记录前后的 10 条记录,

其中 dev_ID = @x,code_Id = @y 和 date = @someDate。

当前的:

我能够返回两个单独查询中所需的结果,但无法将它们组合成一个结果集。

( SELECT TOP 10
            tblData.*
  FROM      tblData
  WHERE     pk <= 5481
        AND dev_ID = 'REC1'
        AND code_ID = 'FMU'
        AND CAST(event_date_time AS DATE) = '10/18/2013'
  ORDER BY  pk DESC
)
UNION
( SELECT TOP 10
            tblData.*
   FROM      tblData
  WHERE     pk >= 5481
            AND dev_ID = 'REC1'
            AND code_ID = 'FMU'
            AND CAST(event_date_time AS DATE) = '10/18/2013'
  ORDER BY  pk ASC
)

真的可以在这方面使用一些帮助。谢谢

更新:

我已经转向这种方法,可以使用一些帮助....

WITH NumberedMyTable AS
(
SELECT ROW_NUMBER() OVER (ORDER BY PK) AS RowNumber, *
FROM
    tblData
WHERE dev_ID = 'REC1' AND code_ID = 'FMC' AND CAST(date_time as DATE) = '10/18/2013'
)
SELECT *  
FROM
    NumberedMyTable
WHERE
    ((**SELECT RowNumber FROM NumberedMyTable WHERE PK = 5481)** BETWEEN RowNumber + 10 AND   RowNumber - 10) 

这目前没有返回任何记录。

我该如何查询RowNumber

用于在WHERE子句中返回所需范围的粗体部分?

原始努力:

WITH    recs
      AS ( SELECT TOP 1
                    *
           FROM     tblData
           WHERE    pk = GDV_PK
           ORDER BY pk
         ),
    r AS ( SELECT TOP 10
                    tblData.*
           FROM     tblData
           WHERE    dev_ID = @x
                    AND code_ID = @y
           ORDER BY PK DESC
         )
SELECT TOP 10
        *
FROM    tblData
WHERE   dev_ID = ( SELECT   dev_ID
                   FROM     r
                 )
        AND CAST(date_time AS DATE) = @someDate
ORDER BY pk
4

2 回答 2

0
SELECT  TOP 10 tblData.*
    FROM    tblData
    WHERE   dev_ID = @x AND code_ID = @y and date = @someDate
    ORDER BY PK DESC
union 
SELECT  TOP 10 tblData.*
    FROM    tblData
    WHERE   dev_ID = @x AND code_ID = @y and date = @someDate
    ORDER BY PK ASC
于 2013-10-23T18:27:20.700 回答
0

我终于制作了一个可行的解决方案,将其发布在此处以供其他可能遇到此问题的人使用。...

Select * From
(SELECT TOP 10 tblData.*
FROM    tblData
WHERE   pk <= 5481 AND dev_ID = 'REC1' AND code_ID = 'FMU' AND
    CAST(event_date_time as DATE) = '10/18/2013'
UNION
SELECT  TOP 10 tblData.*
FROM    tblData
WHERE   pk >= 5481 AND dev_ID = 'REC1' AND code_ID = 'FMU' AND
    CAST(event_date_time as DATE) = '10/18/2013') A
ORDER BY pk ASC
于 2013-10-24T13:26:00.070 回答