Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос на добавление недостающих записей  [new]
Denik
Member

Откуда:
Сообщений: 9
Подскажите как это реализовать.

У меня есть две таблицы T1 и T2(в качестве примера они урезаны)
Ключ по двум полям Номер и Дата

T1
Номер       Дата            Сумма
1       01.01.2005          20.15
1       01.01.2005          10.10
2       01.01.2005          55.15
3       01.01.2004          5.1
3       01.01.2005          15.15
3       01.01.2005          15.5


T2
Номер       Дата            Сумма
1       01.01.2005          30.25
2       01.01.2005          55.15
3       01.01.2004          5.1


Вопрос: Как мне добавить все те сгруппированные записи из таблицы T1 в T2, которых нет в T2?
5 дек 04, 13:22    [1158697]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление недостающих записей  [new]
Dmitry Gurianov
Member

Откуда:
Сообщений: 651
пробовал использовать конструкцию WHERE NOT EXISTS?
5 дек 04, 13:40    [1158710]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление недостающих записей  [new]
Denik
Member

Откуда:
Сообщений: 9
SELECT НомерЗаказа, ДатаЗаказа, SUM(Сумма)
FROM T1
WHERE (NOT EXISTS
(SELECT НомерЗаказа, ДатаЗаказа
 FROM T2
 WHERE (НомерЗаказа = T1.НомерЗаказа) AND ДатаЗаказа BETWEEN CONVERT(DATETIME, '2004-01-01', 102)
AND CONVERT(DATETIME, '2004-06-01', 102)))
GROUP BY НомерЗаказа, ДатаЗаказа


Мне почему то выводятся все сгрупированные записи, а по идеи должна только вот такая:
3  01.01.2005  30.20
5 дек 04, 14:14    [1158730]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление недостающих записей  [new]
ChA
Member

Откуда: Москва
Сообщений: 11124
Что там делает BETWEEN ? Во-вторых, обязательно ставьте алиасы таблиц к полям, иначе поле внутри подзапроса может быть неверно интерпретировано и взято из внешнего запроса.
5 дек 04, 14:27    [1158743]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление недостающих записей  [new]
Denik
Member

Откуда:
Сообщений: 9
Упрощю:

SELECT НомерЗаказа, ДатаЗаказа, SUM(Сумма)
FROM T1
WHERE (NOT EXISTS
(SELECT НомерЗаказа, ДатаЗаказа
 FROM T2
 WHERE (T2.НомерЗаказа = T1.НомерЗаказа) AND T1.ДатаЗаказа = CONVERT(DATETIME, '2004-01-01', 102)))
GROUP BY НомерЗаказа, ДатаЗаказа

Если в T2 присутствует запись
3  01.01.2004  5.1
то мне ничего не выводится

Если же в таблице T2 вышеуказанная запись есть, то мне выводятся все сгрупированные записи.

Мне необходимо чтобы выборка шла не только по номеру, но и по дате одновременно.

Вы не могли бы привести пример, может я что-то не так пишу.
5 дек 04, 14:47    [1158757]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление недостающих записей  [new]
Dmitry Gurianov
Member

Откуда:
Сообщений: 651
Имхо, что-то такое:

INSERT T2
(SELECT Номер, Дата sum(Сумма) FROM T1
WHERE NOT EXISTS
(SELECT * FROM T2 WHERE T2.Дата=Т1.Дата AND T2.Номер=T1.Номер)
GROUP BY Номер, Дата )

Из Т1 выбираются записи, которых не существует в Т2 (по номеры и дате), и вставляются в Т2
5 дек 04, 14:59    [1158761]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на добавление недостающих записей  [new]
Denik
Member

Откуда:
Сообщений: 9
Спасибо, всё получилось.
Чего-то я совсем забыл о NOT Exist, а использовал NOT IN
5 дек 04, 15:07    [1158767]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить