Обновить одну таблицу на основе условий другой таблицы

#sql #sql-server

#sql #sql-сервер

Вопрос:

 dateTable

Date                 Revenue
1-1-11                 0.00
2-1-11                10.00
3-1-11                10.00
4-1-11                 0.00
5-1-11                10.00
6-1-11                10.00
7-1-11                 0.00
8-1-11                 0.00
............................
............................

userTable

Date        count
2-1-11       2
4-1-11       3
  

Я хочу обновить доход datetable из данных UserTable со следующим условием:

Для второго подсчета доход будет обновляться (к 10.00) дважды в соответствии с увеличением даты использования на 2 дня.

То есть для даты 2-1-11 и количества 2 в usertable доход от datetable будет равен

 Date:                       Revenue
.......................................
4-1-11(2-1-11 2 days)        0.00 10.00
6-1-11(2-1-11 4 days)       10.00 10.00
.......................................
  

Вывод:

 Date                 Revenue
1-1-11                 0.00
2-1-11                10.00
3-1-11                10.00
4-1-11                 0.00 10.00
5-1-11                10.00
6-1-11                10.00 10.00 10.00
7-1-11                 0.00
8-1-11                 0.00 10.00
.............................
..............................
  

Как я могу это сделать?

Комментарии:

1. Извините, но я действительно не понимаю вопроса — у 3-1 дата больше 4, так чего же вы ожидаете от этой даты? Где пример строки для 12-1?

2. Вопрос действительно не имеет смысла. Пожалуйста, опубликуйте пример результатов, которые вы хотите. Помогите нам понять, что такое входные данные и какой запрос вы используете сейчас. Ваши данные находятся выше базовых данных или это пример того, как все должно быть?

3. Пожалуйста, объясните логику лучше. Почему 6-1-11 строка обновляется, когда она вообще не отображается в userTable ?

Ответ №1:

SQL Server имеет очень обширный синтаксис MERGE инструкции. Возможно, вы захотите ознакомиться с этим:

http://technet.microsoft.com/en-us/library/bb510625.aspx

Это должно дать вам «направление», как вы просили.

Комментарии:

1. спасибо за ваш ответ. но я должен работать с sql server 2005, где слияние, я думаю, не введено.

2. Хорошо, это правда. Может быть, эта статья поможет вам? sqlserver-tips.blogspot.com/2006/09 /…