注意:我正在使用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 :(得分: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,我不知道结果应该是什么。不过,上面的查询会为您提供所要求的结果。