2016-11-13 11 views
0

私はITEM , OPCODE ,WorkCenter, LOT , COIL ,Strt_Time(DateTime)のテーブルを持っています。ITEM , OPCODE ,WorkCenter, LOT , COIL ,Strt_Timeと一緒にPrevious WorkCenterとNextWorkCenterを返したいと思います。SQL Serverのサブクエリに基づいて値を返す方法?

particlular LOTのコイルは、タイムスタンプ(Strt_time

とワークセンターからワークセンターに送られます親切にSQL Server 2008でこれを実現する方法を教えてください。

ありがとうございます。

+0

数値である場合のみ、ここにある作品'PrevWorkCenter'として(t2.ITEM = t.ITEMとt2.Strt_Time shawnt00

+0

次と前に同じ 'ITEM'がありますか? – shawnt00

答えて

0

SQL Server 2012では、LEADLAG関数を使用する必要があります。

あなたは、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 

これは私が一般に非標準トップを使用して回避しようが、ワークセンターが

+0

Fadlallah、応答に感謝します。私はこのクエリを試みたが、私はエラーが発生している。テーブルから列名を認識できません。私は "mytable"を "ALLPROD"の実際のテーブル名に変更しました – MEngineer

+0

それを修正しました。今すぐチェックする – Hadi

関連する問題