powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите решить задачу пожалуйста
12 сообщений из 12, страница 1 из 1
Помогите решить задачу пожалуйста
    #40052131
alexandrDr87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задание:

Необходимо вывести все покупки клиента (сумма, дата, наименование) в обратном хронологическом порядке, пока его кредит больше нуля.
В последнюю строку необходимо вывести остаток кредита.(Решение должно работать в MS SQL2008)

Тестовые данные:

DECLARE @Table1 table (Id_Client int, Value money) -- клиенты
-- Id_Client – идентификатор клиента, Value – размер кредита

INSERT INTO @Table1 (Id_Client, Value)
SELECT 1, 24
UNION SELECT 2, 13
UNION SELECT 3, 2
UNION SELECT 4, 5

DECLARE @Table2 table (Id_Client int, DocDate datetime, Amount money, Caption varchar(6)) -- покупки
-- Id_Client – идентификатор клиента, Amount – сумма покупки, DocDate – дата покупки, Caption - наименование покупки

INSERT INTO @Table2 (Id_Client, Amount, DocDate, Caption)

SELECT 1, 5, '20051024', 'qh'
UNION SELECT 1, 9, '20051019', 'wj'
UNION SELECT 1, 3, '20051022', 'ek'
UNION SELECT 1, 8, '20051004', 'rl'
UNION SELECT 1, 6, '20051018', 'tz'
UNION SELECT 1, 5, '20050929', 'yx'
UNION SELECT 2, 11, '20051023', 'uc'
UNION SELECT 2, 6, '20051021', 'iv'
UNION SELECT 2, 45, '20051018', 'ob'
UNION SELECT 3, 4, '20051030', 'pn'
UNION SELECT 3, 2, '20051028', 'am'
UNION SELECT 4, 4, '20051021', 'sq'
UNION SELECT 4, 6, '20051023', 'dw'
UNION SELECT 4, 8, '20051023', 'fe'
UNION SELECT 4, 9, '20051023', 'gr'

Результат:

1 2005-10-24 00:00:00 5.00 qh
1 2005-10-22 00:00:00 3.00 ek
1 2005-10-19 00:00:00 9.00 wj
1 2005-10-18 00:00:00 6.00 tz
1 2005-10-04 00:00:00 1.00 rl
2 2005-10-23 00:00:00 11.00 uc
2 2005-10-21 00:00:00 2.00 iv
3 2005-10-30 00:00:00 2.00 pn
4 2005-10-23 00:00:00 5.00 gr
...
Рейтинг: 0 / 0
Помогите решить задачу пожалуйста
    #40052138
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexandrDr87,

У тебя, студент, нихрена не сходится результат со входными данными. Когда копипастишь домашнее задание, то хоть копипасть правильно.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
;with t as (
select a.Id_Client, a.DocDate, a.Amount, sum(b.Amount) s, c.Value from
  @table2 a, @table2 b, @Table1 c
  where b.Id_Client = a.Id_Client and b.DocDate <= a.DocDate and a.Id_Client = c.Id_Client
  group by a.Id_Client, a.DocDate, a.Amount, c.Value
  having sum(b.Amount) < c.Value
)
select Id_Client, DocDate, Amount from t
  order by Id_Client, DocDate
...
Рейтинг: 0 / 0
Помогите решить задачу пожалуйста
    #40052155
alexandrDr87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat, спасибо вам за помощь и потраченное время. задание я скопировал один к одному, как было в документе с заданием.

Получается невозможно на основе этих данных сделать вывод требуемый в задании?
...
Рейтинг: 0 / 0
Помогите решить задачу пожалуйста
    #40052190
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

все в задании и примере правильно, читай внимательно условия задачи.
решение не верное! садись - 2!
...
Рейтинг: 0 / 0
Помогите решить задачу пожалуйста
    #40052211
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor
fkthat,

все в задании и примере правильно, читай внимательно условия задачи.
решение не верное! садись - 2!

Для клиента номер 2 первая же покупка перекрывает его кредит больше чем в три раза - как он может оказаться в результате? И еще

alexandrDr87
В последнюю строку необходимо вывести остаток кредита

С какой датой его выводить? Датой китайской пасхи?
...
Рейтинг: 0 / 0
Помогите решить задачу пожалуйста
    #40052242
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexandrDr87

Получается невозможно на основе этих данных сделать вывод требуемый в задании?


1. посмотрите на "результат" и найдите там "В последнюю строку необходимо вывести остаток кредита.(Решение должно работать в MS SQL2008)"
2. Попробуйте просчитать данные и вы не получите результата
3. Что-то вроде, коряво
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
;with #t as (
select t1.Id_Client, t2.DocDate, t2.Amount,
t1.Value - sum(t2.Amount) over(partition by t2.Id_Client order by t2.DocDate) as ost,
Caption  
from @Table1 t1 
left join @Table2 t2 on t2.Id_Client=t1.Id_Client
),
#t2 as (
select Id_Client, DocDate, Amount,Caption, ost, 1 as pr
from #t 
where ost >0)
select Id_Client, DocDate, Amount,Caption, pr from #t2
union 
select Id_Client, max(DocDate), min(ost),null, 0 from #t2
group by Id_Client
order by Id_Client asc, pr desc, DocDate desc
...
Рейтинг: 0 / 0
Помогите решить задачу пожалуйста
    #40052243
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кстати, не совсем верно, т.к. в результате присутствует "признак", что нет в образце "результата"
...
Рейтинг: 0 / 0
Помогите решить задачу пожалуйста
    #40052268
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

для клиента 2
покупки вычитаем в обратном порядке 11
значит 2 строки:
первая покупка = 11 (остаток 2 на ум пошло)
вторая покупка невозможна (6) значит выводим остаток кредита = 2
...
Рейтинг: 0 / 0
Помогите решить задачу пожалуйста
    #40052280
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor
покупки вычитаем в обратном порядке 11

Хм.... На деле просто ничерта непонятно, что значит

alexandrDr87
пока его кредит больше нуля.

В моем представлении есть некоторый кредит, из которого ты совершаешь покупки, при этом, соответственно, каждый раз твой кредит уменьшается. А как это, интересно, можно совершать покупки "в обратном хронологическом порядке" - сначала купили что-то вчера, а потом купили еще что-то позавчера?
...
Рейтинг: 0 / 0
Помогите решить задачу пожалуйста
    #40052290
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShIgor
fkthat,

для клиента 2
покупки вычитаем в обратном порядке 11
значит 2 строки:
первая покупка = 11 (остаток 2 на ум пошло)
вторая покупка невозможна (6) значит выводим остаток кредита = 2

Падаждите! С чего это "вычитаем в обратном порядке"? В задании написано : " вывести все покупки клиента ...в обратном хронологическом порядке".
Соответственно, для клиента "2" первая покупка "45", что больше кредита "13", что автоматически опускает остаток кредита в "-"
...
Рейтинг: 0 / 0
Помогите решить задачу пожалуйста
    #40052349
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
godsql,

там точки нет.
после запятой условие задачи продолжается.
и не надо бизнес задачу притягивать к здравой логике.
при выполнении любой задачи это первостепенное правило, если что-то не понятно и/или сомневаешься - уточняй у бизнеса, доказывай что это бред, но самостоятельно менять условие задачи не имеешь права. инициатива наказуема.
...
Рейтинг: 0 / 0
Помогите решить задачу пожалуйста
    #40052377
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor
сомневаешься - уточняй у бизнеса

Бизнес недоступен, потому что

alexandrDr87
задание я скопировал один к одному

Ну, хоть скопировал, а не просто сфотографировал на телефон, как многие. Уже и то хорошо :)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите решить задачу пожалуйста
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]