2010-11-30 23 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 2010-11-30 20:48:08

回答

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 2010-11-30 23:40:53

相關問題