2016-11-27 2 views
1

SQL Server CEで同じ列の値を計算します。問題IDのが順序ではないので、行を削除した後null年代です:http://imgur.com/rHKaPwXSQL Server CE:同じ列の値を計算します(行が削除された後に問題が発生します)。

:1,2,3,4,5 ...彼らは、1,2,3,5,6- ...

スクリーンショットです

クエリこのIDを挿入する方法

SELECT 
    t2.id, t2.datum, 
    t2.stanjekm, 
    t2.tocenolit, 
    t2.stanjekm - t1.stanjekm as PredjenoKm 
FROM 
    Gorivo AS t1 
RIGHT JOIN 
    Gorivo AS t2 ON t1.id = t2.id-1 

SELECT MAX(id) 
FROM gorivo 
WHERE id NOT IN (SELECT MAX(id) FROM gorivo) 

の代わり:

t2.id-1 
+0

私は、画像に基づいて、SQL Serverのタグを追加しました。 –

+0

@GordonLinoff:スクリーンショットでは、「SQL Server Compact」への接続であることが示されています。「sql-server」の代わりに 'sql-server-ce'タグを使用します。 –

答えて

0

実際には、前の行の値を調べるLAG関数を探しています。
ご覧のとおり、自己結合の必要はありません。

LAG (Transact-SQL)

SELECT id, 
     datum, 
     stanjekm, 
     tocenolit, 
     stanjekm - lag (stanjekm,1,0) over (order by id) as PredjenoKm 
FROM Gorivo as 

OR

;with t as 
     (
       SELECT id, 
         datum, 
         stanjekm, 
         tocenolit, 
         stanjekm, 
         row_number() over (order by id) as rn 

       FROM Gorivo as 
     ) 

select t1.id, 
     t1.datum, 
     t1.stanjekm, 
     t1.tocenolit, 
     t1.stanjekm - isnull(t2.stanjekm,0) 
from t as t1 left join t as t2 on t2.rn = t1.rn - 1 
+0

これは洗練されたソリューションのようですが、 SQLコンパクトCE 3.5と私はLAGがSQL 2012で導入されたと思うよ。 – Josip

+0

@Josip、ROW_NUMBER?更新された回答を参照 –

+0

クエリの解析中にエラーが発生しました。 [トークン行番号= 1、トークン行オフセット= 1、エラーのトークン= =付き] – Josip

0

行が削除されたときに「見つからない」IDが心配されているようです。簡単な答えは、心配しないでください。

ididentityという列として定義し、新しい行に新しい数値を割り当てるようにします。行の隙間を気にする必要はありません。実際にそれらを埋め込むことで、ID列の非常に強力な機能の1つが削除されます。これは、行がテーブルに挿入される順序を列挙します。

関連する問題