2010-11-30 6 views
0

Note: J'utilise SQL Server 2008Comment ajouter un scalaire sur une colonne partitionnée à partir d'une table de consultation?

Disons que j'ai une table de voitures, et une table de recherche des États.

  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 

Ce que je veux faire est pour chaque NIV, regardez l'État et ajouter le kilométrage pour chaque mois respectif. Ensuite, démarrez le processus pour le numéro VIN suivant.

Ainsi, le résultat serait:

  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

Je crois que c'est correct. Regardez la colonne MILEAGE. Pour le premier NIV, il commence à 13000, puis 1000 sont ajoutés pour chaque mois (14000, puis 15000). La quantité de kilométrage à ajouter dépend de l'État. – sean

Répondre

0

Eh bien, si je comprends bien votre question, vous pouvez faire quelque chose comme ceci:

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] 

Bien sûr, si vous souhaitez utiliser la requête ci-dessus, vous devez être conscient de certaines considérations. Tout d'abord, il suppose que dans le MainTable vous ne pouvez pas avoir de doublons sur les champs VIN, MILEAGE, State et ME_Date. De plus, je ne sais pas quel devrait être le résultat si un même NIV, MILEAGE et État avaient ME_Dates le même mois. Pourtant, la requête ci-dessus vous donne le résultat que vous avez demandé.

+0

Cela semble être la réponse. Mon ensemble de données est beaucoup plus volumineux, mais chaque ligne est unique au VIN et à la date de fin du mois. Merci de votre aide! – sean

Questions connexes