0

フィルタリングされたレコードを表示するグリッドビューがあります。つまり、主キーにギャップがありますID

通常、フィルタは次の 3 つの列に適用されます。

dev_ID (nvarchar)
date
code_ID (nvarchar)

次のクエリでフィルタリングされないランダムな4番目の列。

グリッドビュー レコードを選択すると、

に戻ってDB、選択した gridview レコードの前後の 10 個のレコードを取得したい

(この例では から始めることができPKます)。

これらのレコードはNOT、主キーがシーケンシャルでIDあり、他の要因に基づいている可能性があります。

前に 10 レコード、または後に 10 レコードがない場合があります。

新しいクエリは、選択したレコードの前後の 10 個のレコードを返す必要があります。

ここで、dev_ID = @x、code_Id = @y、date = @someDate です。

現在:

2 つの個別のクエリで必要な結果を返すことはできますが、それらを 1 つの結果セットに結合することはできません。

( 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 * 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 に答える