Форум программистов, компьютерный форум, киберфорум
Наши страницы

Microsoft SQL Server

Войти
Регистрация
Восстановить пароль
 
griv89
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 3
#1

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

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

Здравствуйте!

Новичок в 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2015, 11:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запрос с вычисляемыми условиями (SQL Server):

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

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

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

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

Max 1 столбца , но с разными условиями where - SQL Server
Возможно ли получить разницы маx значении 1 столбца 1 таблицы, но с разными условиями where? Т.е. мне нужно получить мах столбца С1 за...

Вывод записей с несколькими условиями - SQL Server
Есть таблица А и Б, связь один-много. В таблице А поля фио и т.д., в таблице Б вторичный ключ и название категории. ФИО1 - категория1 ...

4
invm
1627 / 1101 / 295
Регистрация: 02.06.2013
Сообщений: 2,749
01.06.2015, 12:31 #2
Цитата Сообщение от griv89 Посмотреть сообщение
как можно сделать или хотя бы в какую сторону думать?
Стандартная задача на нарастающий итог, он же running total. Способы реализации зависят от версии сервера.
1
griv89
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 3
02.06.2015, 08:37  [ТС] #3
Цитата Сообщение от invm Посмотреть сообщение
Стандартная задача на нарастающий итог, он же running total. Способы реализации зависят от версии сервера.
Просмотрел про нарастающий итог информацию. В принципе более-менее понятно. Не очень понимаю как сделать следующее:
Цитата Сообщение от griv89 Посмотреть сообщение
в последней строке для каждого клиента должна быть указана не сумма покупки, а остаток кредита.
Работаю в SQL Server 2008.
0
invm
1627 / 1101 / 295
Регистрация: 02.06.2013
Сообщений: 2,749
02.06.2015, 10:55 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
griv89
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 3
02.06.2015, 11:00  [ТС] #5
Огромное спасибо, буду разбираться!
0
02.06.2015, 11:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2015, 11:00
Привет! Вот еще темы с ответами:

Внесение значения с опр-ны условиями в поле NULL - SQL Server
Добрый день. Есть такой вопрос. НА скрине указано: столбец shp_code последняя запись NULL.Как можно, при определнных условиях, внести в это...

Как сделать запрос, что бы найти минимальное число через под ЗАПРОС - SQL Server
Этот запрос у меня считает минимальное время ( сколько часов ведет урок препод), который ведет препод по предметам. Как это сделать...

Конструкция if (условие) then (запрос 1) else (запрос 2) as (имя) - SQL Server
Если такое возможно, то как правильно пишется? (Синтаксис интересует)

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru