SQL Server 2012では、LEAD
とLAG
関数を使用する必要があります。
あなたは、SQL Server 2008を使用しているので、ここでの回避策です:
WITH WorkCenter_details AS
(
SELECT
ROW_NUMBER() OVER ( ORDER BY Strt_Time) rn,
(ROW_NUMBER() OVER ( ORDER BY Strt_Time))/2 rndiv2,
(ROW_NUMBER() OVER ( ORDER BY Strt_Time) + 1)/2 rnplus1div2,
ITEM, OPCODE, WorkCenter, LOT, COIL, Strt_Time
FROM
MyTable
)
SELECT
rn, rndiv2, rnplus1div2,
ITEM, OPCODE, WorkCenter, LOT, COIL, Strt_Time,
CASE
WHEN rn % 2 = 1
THEN MAX(CASE WHEN rn % 2 = 0 THEN WorkCenter END) OVER (PARTITION BY rndiv2)
ELSE MAX(CASE WHEN rn % 2 = 1 THEN WorkCenter END) OVER (PARTITION BY rnplus1div2)
END AS WorkCenter_Previous,
CASE
WHEN rn % 2 = 1
THEN MAX(CASE WHEN rn % 2 = 0 THEN WorkCenter END) OVER (PARTITION BY rnplus1div2)
ELSE MAX(CASE WHEN rn % 2 = 1 THEN WorkCenter END) OVER (PARTITION BY rndiv2)
END AS WorkCenter_Next
FROM
WorkCenter_details
ORDER BY
ITEM, Strt_Time
これは私が一般に非標準トップを使用して回避しようが、ワークセンターが
数値である場合のみ、ここにある作品'PrevWorkCenter'として(t2.ITEM = t.ITEMとt2.Strt_Time
shawnt00
次と前に同じ 'ITEM'がありますか? – shawnt00