2013-10-23 100 views
0

我有一个GridView显示筛选的记录,也就是说,有在主键ID差距。返回非连续记录

过滤器典型地施加于3列:

dev_ID (nvarchar) 
date 
code_ID (nvarchar) 

且不会在下一查询待过滤的随机第四列。

当选择一个gridview记录,

我想之前选定的gridview的记录后,返回到DB,并获得10个记录

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

这些记录可能仍然NOT是顺序的上主键ID和基于其它因素,

可能不存在后前10条记录或10条记录。

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

其中DEV_ID = @x,code_Id = @y和日期= @someDate。

CURRENT:

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

(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 
) 

真的可以在这部分使用一些帮助。感谢

UPDATE:

我已经搬到了这一做法,并可以使用一点帮助....

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) 

这cuurently没有返回任何记录。

我怎样才能查询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 
+0

所以tblTelematicData是表拥有你想要的21条记录? – Michael

+0

对不起,没有tblData,修复错误。 – htm11h

回答

0

我终于产生了有效的解决方案,在这里张贴任何其他人可能来自accros这个....

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 
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 
+0

谢谢你的repsonse,但是,这看起来不起作用,UNION附近的语法不正确,它没有找到pk识别之前和之后10的记录。 – htm11h

+0

我查过并且工会不喜欢订单。但我无法弄清楚各种排序不起作用。 – Paparazzi