1

結果セット内から以前の値を取得しようとしています。
次のようなテーブル「TableA」があります-

ColumnID    ColumnValue
1           100
2           NULL
3           NULL
4           0
5           10
6           100
7           100

このクエリを使用して次の結果セットを取得します-

"Select ColumnID, ColumnValue from TableA
WHERE ColumnValue = 100
ORDER BY ColumnID DESC"

ColumnID    ColumnValue

7           100         
6           100         
1           100 

今、私が持っている結果セット (前のクエリ) にもう 1 つの列を追加する必要があります。これにより、既存の結果セットの "WITHIN" から前の ColumnID が得られます。
ColumnID は任意の順序に従わないため、結果セット内で言及しました。この場合のように、7、6 から 1 に直行します。

ColumnID    ColumnValue PreviousColumnID
7           100         6
6           100         1
1           100         NULL

ヘルプはありますか?SQL Server 2008 を使用しています

4

2 に答える 2

0

偽の注文列を使用しますnum

SELECT MIN (CASE x WHEN 0 THEN ColumnID END) AS ColumnID
    , MIN (CASE x WHEN 0 THEN ColumnValue END) AS ColumnValue
    , MIN (CASE x WHEN 1 THEN ColumnID END) AS ColumnID_prev
FROM (
    SELECT ColumnID, ColumnValue, ROW_NUMBER() OVER(ORDER BY ColumnID DESC) AS num
    FROM TableA
    WHERE ColumnValue = 100
) T
CROSS JOIN (VALUES(0),(1))x(x)
WHERE num - x > 0
GROUP BY num - x
于 2013-10-23T14:51:02.233 に答える