Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
07.10.2003, 09:47
|
|||
---|---|---|---|
|
|||
маленькая задачка |
|||
#18+
Здравствуйте !!! Помогите решить следующую задачку средствами SQL Есть таблица1 с данными А 1 10 А 2 12 А 3 2 А 4 5 И таблица 2 с данными А 25 необходимо получить таблицу 3 А 1 10 А 2 12 А 3 2 А 4 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 09:57
|
|||
---|---|---|---|
маленькая задачка |
|||
#18+
select 'А', 1, 10, union select 'А', 2, 12 union select 'А', 3, 2 union select 'А', 4, 1 или в чем закономерность ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 10:00
|
|||
---|---|---|---|
|
|||
маленькая задачка |
|||
#18+
необхимо получить таблицу 3 по выборке из таб 1 и 2 т.е. во второй таблице указан товар "А" и кол-во 25 а в первой таблице есть Товар, Номер партии, Кол-во в партии. Вот и надо получить таблицу 3, данные в таблице 1 и 2 могут быть произвольные естественно. Извиняюсь за непонятную постановку вопроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 10:10
|
|||
---|---|---|---|
маленькая задачка |
|||
#18+
Имхо понятнее не стало...Так что же должно быть не в 1-й и не во 2-й таблице, а в самой что ни на есть 3-ей? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 10:12
|
|||
---|---|---|---|
маленькая задачка |
|||
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 10:15
|
|||
---|---|---|---|
маленькая задачка |
|||
#18+
кажется я догадался, и если догадка верна, то запросом никак, придется в цикле добавлять по записи и проверять на сумму никак - потому, что записи невозможно разбить на произвольное, но конечное количество групп, объединив их в юнион, чтобы в последнем селекте юниона добавить недостающий остаток вобщем задача нереляциооная - подбор в чистов виде, а значит итерации вариант циклом тоже вызывает затруднение? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 10:20
|
|||
---|---|---|---|
маленькая задачка |
|||
#18+
посмотрел вариант Glory, решил подробнее описать свою догадку: в таблице 2 - желаемый товар и кол-во, в таблице 3 - список партий из таблицы 1, количество в которых может быть уменьшено так, чтобы в сумме было число из таблицы 2 если это так - то только цикл ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 10:21
|
|||
---|---|---|---|
маленькая задачка |
|||
#18+
Это а-ля knapsack задача? На T-SQL? И чтобы быстро? Уже интересно... Или просто последний кусок на части разбить надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 10:25
|
|||
---|---|---|---|
маленькая задачка |
|||
#18+
какие партии должны выбираться? те что пришли раньше или позже? нужно четче поставить задачу..... думаю что партию можно использовать и частично.... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 11:14
|
|||
---|---|---|---|
|
|||
маленькая задачка |
|||
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 11:21
|
|||
---|---|---|---|
маленькая задачка |
|||
#18+
не пугай, а я конечно проверил из любопытства (а сам то смотрел на результат? - он не отличается от входных данных), но кажется чудес не бывает ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 11:24
|
|||
---|---|---|---|
|
|||
маленькая задачка |
|||
#18+
2 iSestrin: догадался. 2 MiCe: не важно в каком порядке партии, сейчас важно, что можно ли запросом бить последнюю расходуемую. 2 Павел Воронцов: спасибо за пример, сейчас поразбираюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 11:27
|
|||
---|---|---|---|
|
|||
маленькая задачка |
|||
#18+
2: Павел Воронцов похоже, но когда ровное количество, в данном примере 22 или 24, то добавляется последняя с нулевым количеством. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 11:34
|
|||
---|---|---|---|
|
|||
маленькая задачка |
|||
#18+
2: Павел Воронцов, лечится если в коде from @party p inner join @good g on p.good_code = g.good_code and g.quantity >= (select sum(p1.quantity) - p.quantity from @party p1 where p1.good_code = p.good_code and p1.party_date <= p.party_date) заменить на and g.quantity > (select sum(p1.quantity) - p.quantity ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 11:41
|
|||
---|---|---|---|
|
|||
маленькая задачка |
|||
#18+
iSestrin Шо, страшно? Я ещё и крестиком могу.. Aleksey777 Да, похоже, что так. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 11:45
|
|||
---|---|---|---|
|
|||
маленькая задачка |
|||
#18+
2: Павел Воронцов. Спасибо !!! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 11:51
|
|||
---|---|---|---|
маленькая задачка |
|||
#18+
2 Павел Воронцов работа великолепная, но ... я нашел ошибку, или скажем так - вариант входных данных, на которых это не работает (например повтори одну партию с кол-м = 1 раз 30, и все ломается) потому и остаюсь при своем мнении ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 12:02
|
|||
---|---|---|---|
|
|||
маленькая задачка |
|||
#18+
iSestrin Да Бога ради, оставайся при своём мнении, я не в обиде! ) А вот набор данных, на котором ломается - приведи пожалуйста. Желательно код. Заранее благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 12:09
|
|||
---|---|---|---|
маленькая задачка |
|||
#18+
вот это место: insert into @party (good_code, quantity,party_date) values ('A',10,getdate()-3) insert into @party (good_code, quantity,party_date) values ('A',12,getdate()-2) insert into @party (good_code, quantity,party_date) values ('A',2,getdate()-1) insert into @party (good_code, quantity,party_date) values ('A',5,getdate()) меняем на insert into @party (good_code, quantity,party_date) values ('A',1,getdate()) повторенное, как я уже сказал, раз 30, чтоб хватило, но скорее всего это не важно т.е. важен принцип - при совпадении партий - не работает ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 12:24
|
|||
---|---|---|---|
|
|||
маленькая задачка |
|||
#18+
iSestrin дело стало быть в следующем. Я предполагал (жаль, в констрейнты это не внёс для пущей ясности), что партии отличаются по датам появления. Строка insert into @party (good_code, quantity,party_date) values ('A',1,getdate()) повторееная несколько раз добавит записи с АБСОЛЮТНО ОДИНАКОВЫМИ датами (это фича сервера - он дёргает getdate один раз, оптимизатор хренов..) - проверьте сами. В принципе запрос можно переписать, заложившись на последовательность идентификаторов партий, но лень да и незачем. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2003, 12:45
|
|||
---|---|---|---|
маленькая задачка |
|||
#18+
wow! это я погорячился ... собственно getdate() он дергает много раз, просто ее дискрет кажется 0.003, потому совпадает, но это не важно... меняю свое мнение на прямо противоположное:) респект! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.04.2020, 16:49
|
|||
---|---|---|---|
|
|||
маленькая задачка |
|||
#18+
День добрый! Очень понравилось решение этой задачки, предложенное Павлом Воронцовым. Вопрос к знатокам SQL: а можно ли его применить для решения более сложной задачи - последовательного распределения по партиям не одной, а нескольких сумм (c сохранением информации не только о том, в каком размере партия "закрыта", но и какой именно из сумм и в каком объеме)? Сложность в таком случае возникает из-за возможности закрытия 1 партии частями разных сумм из goods. Указанную в решении таблицу good вижу для себя примерно как-то так: declare @good table ( good_code char(1) not null, good_row_id int not null identity(1,1) primary key, quantity int not null check (quantity > 0 ) ) ожидаемый результат: party_id / quantity / party_date / good_row_id / q К сожалению, у меня выходит решить эту задачу только последовательными итерациями, а хотелось бы элегантного решения 1 запросом. Возможно ли такое? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.04.2020, 17:17
|
|||
---|---|---|---|
|
|||
маленькая задачка |
|||
#18+
Алексей., А какого объема данные? ИМО данные будет быстрее загрузить в C# масссив и разложить алгоритмически, чем учить лягушку разговаривать. Можно оформить табличной CLR функцией. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=46&mobile=1&tid=1686234]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 150ms |
0 / 0 |