2010-11-30 20 views
0

注:私はSQL Server 2008を使用していますルックアップテーブルから分割された列にスカラーを追加するにはどうすればよいですか?

私は車のテーブルと状態のルックアップテーブルを持っているとしましょう。

  Main Table    
VIN MILEAGE State ME_Date 
AAA111 13000 CA 8/31/2010 
AAA111 13000 CA 9/30/2010 
AAA111 13000 CA 10/31/2010 
BBB222 71000 NY 8/31/2010 
BBB222 71000 NY 9/30/2010 
BBB222 71000 NY 10/31/2010 
CCC333 5500 AZ 8/31/2010 
CCC333 5500 AZ 9/30/2010 
CCC333 5500 AZ 10/31/2010 

     Look up Table  
State Avg_Monthly_Mileage 
CA  1000 
NY  1500 
AZ  800 

私がしたいことは、各VIN#のために、州を調べて毎月のマイルを加算することです。次に、次のVIN#の処理を開始します。

ので、その結果は次のようになります。まあ

  Main Table    
VIN MILEAGE State ME_Date 
AAA111 13000 CA 8/31/2010 
AAA111 14000 CA 9/30/2010 
AAA111 15000 CA 10/31/2010 
BBB222 71000 NY 8/31/2010 
BBB222 72500 NY 9/30/2010 
BBB222 74000 NY 10/31/2010 
CCC333 5500 AZ 8/31/2010 
CCC333 6300 AZ 9/30/2010 
CCC333 7100 AZ 10/31/2010 
+0

私はそれが正しいと信じています。 MILEAGE列を見てください。最初のVINは13000から始まり、毎月1000が追加されます(14000、15000)。追加が必要なマイル量は州によって異なります。 – sean

答えて

0

、私が正しくあなたの質問を理解していれば、あなたはこのような何か行うことができます:あなたが使用したい場合は、もちろん

SELECT A.VIN, A.MILEAGE + (Id-1)*ISNULL(B.Avg_Monthly_Mileage,0) AS MILEAGE, A.[State], A.ME_Date 
FROM ( SELECT *, ROW_NUMBER() OVER(PARTITION BY VIN, State) Id 
     FROM dbo.MainTable) A 
LEFT JOIN LookUpTable B 
ON A.[State] = B.[State] 

を上記のクエリでは、いくつかの考慮事項を知っておく必要があります。まず、MainTableでは、VIN、MILEAGE、State、およびME_Dateの各フィールドに重複を持つことはできません。また、同じVIN、MILEAGE、州に同じ月にME_Datesがある場合、結果がどうなるべきかわかりません。それでも、上記のクエリはあなたが求めた結果を提供します。

+0

これは答えのようです。私のデータセットははるかに大きいですが、すべての行はVINと月の終了日に一意です。ご協力いただきありがとうございます! – sean

関連する問題