Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 3
1

Запрос с вычисляемыми условиями

01.06.2015, 11:35. Показов 2013. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Новичок в SQL, помогите решить задачу. Даны 2 таблицы: @T1 (Id – ID клиента, Credit – размер кредита), @T2 (Id – ID клиента, Sum – сумма покупки, Date – дата покупки, Name - наименование покупки). Необходимо написать запрос, результатом которого будет таблица с покупками всех клиентов, отсортированная в обратном хронологическом порядке. В этой таблице должны отобразиться только те покупки, на которые хватит кредита. Причем, в последней строке для каждого клиента должна быть указана не сумма покупки, а остаток кредита.

Т.е. если в первую таблицу внести строку (1, 24), а во вторую таблицу добавить записи, например:
1, 5, '10.24.2005', 'хлеб'
1, 9, '10.19.2005', 'молоко'
1, 3, '10.22.2005', 'гречка'
1, 8, '10.04.2005', 'колбаса'
1, 6, '10.18.2005', 'огурец'
1, 5, '09.29.2005', 'холодец'
2,....

То в результате должно получиться следующее:
1 2005-10-24 00:00:00 5.00 хлеб
1 2005-10-22 00:00:00 3.00 гречка
1 2005-10-19 00:00:00 9.00 молоко
1 2005-10-18 00:00:00 6.00 огурец
1 2005-10-04 00:00:00 1.00 колбаса
2 ....
и далее строки по следующим клиентам.

Сам решил через использование двух курсоров (один вложен в другой), но выполняется запрос долго. Да и как-то громоздко очень. Будто чешу правое ухо левой пяткой. Чую, что можно много оптимальнее сделать, а базы нет, поэтому понять как не могу. Подскажите, как можно сделать или хотя бы в какую сторону думать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2015, 11:35
Ответы с готовыми решениями:

Запрос на выборку с условиями
Имеется 2 таблицы: 1ая "Записи на прием", где столбцы: Клиент, дата, id _время 2ая "Время...

Запрос с условиями в Where и Order By
Ребята, подскажите, пожалуйста. Отказывается работать: Суть того, чего я хочу, проста: мне надо...

Запрос с условиями по выводу значений
Всем доброе утро. Что-то не соображу, что не так...... Есть запрос select * from table where .......

Сложный вложенный запрос с несколькими условиями
У меня есть БД, в которой 3 таблицы `seller`, `buyer`, `orders`; Структуры таблиц на приложенном...

4
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
01.06.2015, 12:31 2
Цитата Сообщение от griv89 Посмотреть сообщение
как можно сделать или хотя бы в какую сторону думать?
Стандартная задача на нарастающий итог, он же running total. Способы реализации зависят от версии сервера.
1
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 3
02.06.2015, 08:37  [ТС] 3
Цитата Сообщение от invm Посмотреть сообщение
Стандартная задача на нарастающий итог, он же running total. Способы реализации зависят от версии сервера.
Просмотрел про нарастающий итог информацию. В принципе более-менее понятно. Не очень понимаю как сделать следующее:
Цитата Сообщение от griv89 Посмотреть сообщение
в последней строке для каждого клиента должна быть указана не сумма покупки, а остаток кредита.
Работаю в SQL Server 2008.
0
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
02.06.2015, 10:55 4
Лучший ответ Сообщение было отмечено Metall_Version как решение

Решение

T-SQL
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
set dateformat mdy;
 
declare @t1 table (id int, credit numeric(18,2));
insert into @t1
values
 (1, 24);
 
declare @t2 table (id int, s numeric(18,2), dt datetime, name varchar(50));
insert into @t2
values
 (1, 5, '10.24.2005', 'хлеб'),
 (1, 9, '10.19.2005', 'молоко'),
 (1, 3, '10.22.2005', 'гречка'),
 (1, 8, '10.04.2005', 'колбаса'),
 (1, 6, '10.18.2005', 'огурец'),
 (1, 5, '09.29.2005', 'холодец');
 
select
 b.id, b.dt,
 case when a.credit >= c.s then b.s else d.cr end,
 b.name
from
 @t1 a join
 @t2 b on b.id = a.id cross apply
 (select sum(s) from @t2 where id = b.id and dt >= b.dt) c(s) cross apply
 (select a.credit - (c.s - b.s)) as d(cr)
where
 d.cr >= 0
order by
 b.id, b.dt desc;
1
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 3
02.06.2015, 11:00  [ТС] 5
Огромное спасибо, буду разбираться!
0
02.06.2015, 11:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2015, 11:00
Помогаю со студенческими работами здесь

Как правильно выглядит запрос с двумя и более условиями?
Имеется SELECT TIN FROM dbo.Organization_Table WHERE ID_Organization = n необходимо сотворить...

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

Запрос с вычисляемыми полями
Здравствуйте, столкнулся с проблемкой в Access2007: запрос с вычисляемым полем которое отображает...

Запрос с вычисляемыми полями
Здравствуйте, помогите исправить ошибку в запросе. SELECT Клиенты., Клиенты., Клиенты.Адрес, ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru