Помогите составить запрос

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Владимир
Сообщения: 56
Зарегистрирован: 25 апр 2005, 13:57

Добрый день всем.
Данность: есть две таблицы 1. "ДолгиКонтрагентов" - поля "id контрагента", "сумма долга", 2. "ДокументыОтгрузки" - поля "id документа", "дата отгрузки", "сумма отгрузки".
Задача: составить запрос, который возвращал бы выборку документов по контрагентам, при этом в выборку должны попасть документы сумма которых не превышает сумму долга контрагента
БД: MS SQL 2K

Подскажите, можно ли составить такой запрос
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Можно все, уважаемый почитайте тут
http://www.mysql.ru/docs/tkachenko/
а потом тут
http://www.mysql.ru/docs/pautov/app1.htm
и тут
http://www.activeserverpages.ru/Database/sql/select.asp
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Навскидку:
select id_контрагента, id_документа
from ДолгиКонтрагентов, ДокументыОтгрузки
where ДокументыОтгрузки.СуммаОтгрузки<ДолгиКонтрагентов.СуммаДолга
order by id_контрагента
Угадал?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Владимир
Сообщения: 56
Зарегистрирован: 25 апр 2005, 13:57

Хыиуду писал(а):Навскидку:
select id_контрагента, id_документа
from ДолгиКонтрагентов, ДокументыОтгрузки
where ДокументыОтгрузки.СуммаОтгрузки<ДолгиКонтрагентов.СуммаДолга
order by id_контрагента
Угадал?
Не угадал. Такой запрос вернет только те документы у которых сумма отгрузки < суммы долга, а мне нужно вернуть список документов у которых
SUM(ДокументыОтгрузки.СуммаОтгрузки)<ДолгиКонтрагентов.СуммаДолга
Владимир
Сообщения: 56
Зарегистрирован: 25 апр 2005, 13:57

Duncon писал(а):Можно все, уважаемый почитайте тут
http://www.mysql.ru/docs/tkachenko/
а потом тут
http://www.mysql.ru/docs/pautov/app1.htm
и тут
http://www.activeserverpages.ru/Database/sql/select.asp
Я посмотрел ссылочки, но что-то не помогло. Можно "пальцем показать" и привести пример запроса
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Владимир писал(а):Не угадал. Такой запрос вернет только те документы у которых сумма отгрузки < суммы долга, а мне нужно вернуть список документов у которых
Sum(ДокументыОтгрузки.СуммаОтгрузки)<ДолгиКонтрагентов.СуммаДолга
Теряю логическое понимание - что все-таки должен делать запрос?
Допустим, есть у нас два контрагента с долгами, скажем, 14 и 20. Есть документы с суммами 1, 3, 5, 8, 15. Что запрос должен вернуть?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Владимир
Сообщения: 56
Зарегистрирован: 25 апр 2005, 13:57

Контрагент | Документ | Долг | Сумма документа
К1 Д1 14 1
К1 Д2 14 3
К1 Д3 14 5
К2 Д5 20 15
К2 Д6 20 5

или
К1 Д3 14 5
К1 Д4 14 8
К2 Д5 20 15
К2 Д7 20 4
или
К1 Д1 14 1
К1 Д2 14 3
К1 Д4 14 8

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

P.s. сорри что ответил только сегодня
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

я что-то упорно не вижу связи между этими таблицами...
&quot писал(а):сумма которых не превышает сумму долга контрагента
какого-то конкретно?
Изображение
Владимир
Сообщения: 56
Зарегистрирован: 25 апр 2005, 13:57

исходных таблиц две:

1. Контрагент | Сумма долга
К1 | 14
К2 | 20

2. Контрагент | Документ отгрузки| Сумма документа
К1 | Д1 | 1
К1 | Д2 | 3
К1 | Д3 | 5
К1 | Д4 | 8
К2 | Д5 | 15
К2 | Д6 | 5
К2 | Д7 | 4

Меня интерисует можно ли получить одним запросом выборки которые я описывал выше
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Если я правильно помню философию Sql, она вообще не подразумевает, что по одному и тому же запросу можно получить такую-то таблицу ИЛИ сякую-то. По-моему, здесь нужно вытаскивать эти таблицы в программку на каком-нибудь алгоритмическом языке, а там уже их обрабатывать как душе угодно
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить