2012-02-28 3 views
-2

У меня есть таблица со следующими параметрами: идентификатор клиента, MDN, план, StartDate, EndDate, Term, Term Count, SMS Использование Голос ИспользованиеДобавление Term графа в зависимости от количества записей и даты

Там может быть записи, где идентификатор клиента появляется один или несколько раз -

Если есть только один экземпляр этого идентификатора клиента, я хочу термин отсчет быть 1 -

если идентификатор клиента появляется более чем один раз, я хотите заказать все записи по дате начала - и увеличить счетчик термина для каждой записи, которая была заказана по дате начала -

Если идентификатор клиента 34, и даты начала и 1/1/2012 и 2/2/2012

первым должен быть установлен в 1, то второй должен быть установлен в положение 2 -

Sas

ответ

3

так как мы теперь знаем, что это SQL Server 2008, а не SQL Server 2000, как первоначально помечено, мы можем сделать это:

SELECT CustomerID, StartDate, TermCount = ROW_NUMBER() 
    OVER (PARTITION BY CustomerID ORDER BY StartDate) 
    FROM dbo.table 
    ORDER BY CustomerID, StartDate; 

EDIT Добавление UPDA на основе новой информации о требованиях к переключению.

;WITH t AS 
(
    SELECT CustomerID, StartDate, CountColumn, TermCount = ROW_NUMBER() 
     OVER (PARTITION BY CustomerID ORDER BY StartDate) 
     FROM dbo.table 
) UPDATE t SET CountColumn = TermCount; 

Однако, как я предложил в комментариях, это не разумно, так как вам нужно будет постоянно обновлять всю таблицу (или, по крайней мере, весь набор строк для клиента) всякий раз, когда любая строка для этого изменения клиента , Просто создайте представление, основанное на вышеуказанном запросе SELECT, вместо того, чтобы пытаться сохранить данные.


Оставляя 2000 обходной путь здесь, в случае, если другие пользователи сталкивались с той же проблемой, и по-прежнему работает SQL Server 2000 по некоторым причинам. Это будет очень медленно, если ваш стол большой.

SELECT CustomerID, StartDate, TermCount = (
    SELECT COUNT(*) FROM dbo.table AS t2 
    WHERE t.CustomerID = t2.CustomerID 
    AND t.StartDate <= t2.StartDate 
) 
FROM dbo.table AS t 
ORDER BY CustomerID, StartDate; 
+0

им работает SQL сервер 2008 - извините за путаницу –

+0

@Sarfaraz так почему вы были мечения в SQL Server 2000? Это два вопроса, когда была выполнена дополнительная работа, потому что вы сказали, что находитесь на SQL Server 2000. –

+0

Мне нужно подойти поближе, я думал, что я выбрал SQL Server 2008 как раз! - –

Смежные вопросы