Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

SQL задачка.

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
tinimi



Зарегистрирован: 27.03.2005
Сообщения: 90
Откуда: Win32

СообщениеДобавлено: Сб Ноя 12 2005 13:59    Заголовок сообщения: SQL задачка. Ответить с цитатой

Вот. Я в SQL ноль. но нада решить такую задачу:

есть таблица типа:
50
30
47
3
Ну короче числа просто.
И дано число, например 86.
Надо из таблици начиная сверху извлечь елементов на ету сумму.
Тоесть будет:
41
3

Вот. Как на с++ или еще чем сделать знаю, но нада на sql. Помогите плиз.
_________________
[ TiNiMi ]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Princess



Зарегистрирован: 05.10.2005
Сообщения: 48

СообщениеДобавлено: Пн Ноя 14 2005 12:34    Заголовок сообщения: Ответить с цитатой

Хотела бы помощь, но не поняла вопроса? Т.е. что конкретно должно быть на сумму? какая БД (Oracle? MSSQL? ...???)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
tinimi



Зарегистрирован: 27.03.2005
Сообщения: 90
Откуда: Win32

СообщениеДобавлено: Пн Ноя 14 2005 21:44    Заголовок сообщения: Ответить с цитатой

Нет, без привязки к БД. На ANSI SQL.

надо выбрать начиная с начала числа на ету сумму.
Грубо говоря - есть склад, в нем - комнаты.
Числа - ето количество ящиков товара в каждой комнате.
Надо Забрать N ящиков, и вывести что останется, при етом забираем по порядку.
Тоесть было:
10 15 7 3 12 47
Забрали 27 и получили
0 0 5 3 12 47
тоесть забрали соответственно 10+15+2=27.
Надо брать с начала. ну по вышеописаному принципу.
_________________
[ TiNiMi ]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Princess



Зарегистрирован: 05.10.2005
Сообщения: 48

СообщениеДобавлено: Вт Ноя 15 2005 09:24    Заголовок сообщения: Ответить с цитатой

Проблема собственно в том, что в БД строки могут находится в другом порядке. Строки хранятся неупорядоченно.
-> необходимо сначало упорядочить их по какому-то признаку (полю). На сколько я вижу, в твоем случае скорее всего есть поле ID.
-> упорядочиваем по нему : order by ID
А вот дальше уже надо подумать, как это по-красивше сделать.
Про БД я спросила, т.к. SQL может быть разным внутри. ANSI SQL, PL/SQL..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
tinimi



Зарегистрирован: 27.03.2005
Сообщения: 90
Откуда: Win32

СообщениеДобавлено: Вт Ноя 15 2005 12:59    Заголовок сообщения: Ответить с цитатой

БД: ANSI SQL
Упорядочивать никак не надо, вернее есть автоинкремен поле, и соответственно. Порядок не менять.
_________________
[ TiNiMi ]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Princess



Зарегистрирован: 05.10.2005
Сообщения: 48

СообщениеДобавлено: Вт Ноя 15 2005 14:47    Заголовок сообщения: Ответить с цитатой

Упорядочить надо по-любому, т.к. откуда SQL знает, где начало вашей таблицы?
Решать эту задачку предлагаю обсуждая, т.к. ответа я пока не знаю. Есть только идеи: хранимые процедуры, UDF-функции, курсор, может их сочетание.
У вас есть 2 переменные:
1 - сумма s;
2 - поле n.
Тогда:
if s>n then s = s-n; n = 0
else s = 0; n = n-s;
Так должна происходить обработка.
Дальше можно с помощью курсора пробежать по таблице, заменяя необходимые поля.
Справитесь? Или код написать? Сейчас я, кажется, уже знаю как.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Princess



Зарегистрирован: 05.10.2005
Сообщения: 48

СообщениеДобавлено: Вт Ноя 15 2005 15:00    Заголовок сообщения: Ответить с цитатой

DECLARE @n numeric(18,2)
DECLARE @id INT
DECLARE @s numeric(18,2)
DECLARE CURSOR_TYPE CURSOR FOR SELECT t.id, t.n FROM t order by id asc
OPEN CURSOR_TYPE
FETCH NEXT FROM CURSOR_TYPE INTO @id,@n
SELECT @s = 345 --это к примеру
If @s > 0 then begin
If @s>@n then
begin
@s = @s - @n
@n = 0
end
else
begin
@n = @n - @s
@s = 0
end
end
UPDATE t SET t.id=@id, t.n = @n WHERE t.id = @id
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM CURSOR_TYPE INTO @id,@n
If @s > 0 then begin
If @s>@n then
begin
@s = @s - @n
@n = 0
end
else
begin
@n = @n - @s
@s = 0
end
end
UPDATE t SET t.id=@id, t.n = @n WHERE t.id = @id
END
CLOSE CURSOR_TYPE
DEALLOCATE CURSOR_TYPE

Это пока единственное. что приходит в голову. Могут быть ошибки, т.к. на практике я не проверяла.
Данный текст можно оформить внутри хранимой процедуры или UDF-функции, чтобы передать параметр @s внутрь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
tinimi



Зарегистрирован: 27.03.2005
Сообщения: 90
Откуда: Win32

СообщениеДобавлено: Вт Ноя 15 2005 17:35    Заголовок сообщения: Ответить с цитатой

Да, ты, наверрно =), правильно поняла.

Пояснения. БД. Например qwe. =)
В ней одна таблица(покрайней мере мы работаем только с одной)
Вот она:
В ней два столбца.
ID - autoincrement - primary index
asd - number - Сдесь и хранятся наши данные.

А в SQL - я ноль.
Может посоветуеш что нить в електронном варианте?
mail: tinimi<at>gmail<dot>com
_________________
[ TiNiMi ]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Princess



Зарегистрирован: 05.10.2005
Сообщения: 48

СообщениеДобавлено: Вт Ноя 15 2005 17:56    Заголовок сообщения: Ответить с цитатой

http://www.firststeps.ru/

Довольно наглядно. Только это применительно к SQLServer.
Но в нем как раз ANSI SQL.
Основы можете посмотреть там.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
tinimi



Зарегистрирован: 27.03.2005
Сообщения: 90
Откуда: Win32

СообщениеДобавлено: Ср Ноя 16 2005 14:36    Заголовок сообщения: Ответить с цитатой

Спасибо. Может еще что по MySQL подскажеш?
_________________
[ TiNiMi ]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Princess



Зарегистрирован: 05.10.2005
Сообщения: 48

СообщениеДобавлено: Чт Ноя 17 2005 15:37    Заголовок сообщения: Ответить с цитатой

К сожалению, с MySQL не работала и поэтому никаких ссылочек не знаю. Но если порыскать в инете - наверняка найдете Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...