Как добавить скаляр над разделенным столбцом из справочной таблицы? - PullRequest
0 голосов
/ 30 ноября 2010

Примечание: я использую 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 голосов
/ 01 декабря 2010

Ну, если я правильно понимаю ваш вопрос, вы можете сделать что-то вроде этого:

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 в одном месяце. Тем не менее, запрос выше дает вам результат, который вы просили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...