如何在查找表中的分区列上添加标量?

时间:2010-11-30 20:37:08

标签: sql tsql

注意:我正在使用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

1 个答案:

答案 0 :(得分: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和State在同一个月有ME_Dates,我不知道结果应该是什么。不过,上面的查询会为您提供所要求的结果。