powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запросец, который завел меня в тупик
8 сообщений из 8, страница 1 из 1
Запросец, который завел меня в тупик
    #32036223
Roman M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица Nakladnye с полями ID, Date, Summa
ID Date Summa
1 01.01.02 20000
2 15.01.02 10000
3 20.01.02 15000
4 22.01.02 3000

Клиент, например, заплатил 34000.
В этом случае оплаченными являются накладные 1 и 2.
На 3-ю накладную перепадает всего 4000, поэтому она неполностью оплачена.
4-я накладная и вовсе неоплачена.

Надо сделать выборку оплаченных накладных.
...
Рейтинг: 0 / 0
Запросец, который завел меня в тупик
    #32036224
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где собственно храниться вот это "Клиент, например, заплатил 34000" ? В переменной, в таблице ?
...
Рейтинг: 0 / 0
Запросец, который завел меня в тупик
    #32036225
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая версия сервера?
...
Рейтинг: 0 / 0
Запросец, который завел меня в тупик
    #32036226
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну запросец простенький. Хотя, наверное, в таких случаях бизнес-логика должна быть сложнее...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare @pay - оплатил клиент

select n.ID, n.Date, n.Summa, 
  @pay - (select sum(n1.Summa) from Nakladnye n1 where n1.Date <= n.Date ) as Raznost
into #tmp
from Nakladnye n

select ID, Date, Summa,
case when Raznost <  0  then  0  else Raznost end as Ostatok,
case when Raznost <  0  then  1  else  0  end as [Оплачено]
from #tmp

...
Рейтинг: 0 / 0
Запросец, который завел меня в тупик
    #32036229
Roman M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Платежи клиента хранятся в другой таблице, Money:

select sum(Platezh)
from Money
where Client = 5

Результат: 34000


Сервер 7.0
...
Рейтинг: 0 / 0
Запросец, который завел меня в тупик
    #32036232
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
select * from t1 as t where  34000 >(select isnull(sum(summa), 0 ) from t1 where Date<t.date)+summa
...
Рейтинг: 0 / 0
Запросец, который завел меня в тупик
    #32036250
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы так сделал
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
declare @tbl table(id int, Date datetime, Summa int)
insert @tbl select 
 1 ,'20020101',  20000  union select  
 2 ,'20020115',  10000  union select  
 3 ,'20020120',  15000   union select 
 4 ,'20020122',  3000   


select f.id, sum(a.Summa),sum(a.Summa)-f.Summa,
case when sum(a.Summa)< 34000  then 'оплачена'
when sum(a.Summa)-f.Summa> 34000   then 'не оплачена'
else 'частично оплачена' end
from @tbl f, @tbl a
where f.Date>=a.Date
group by f.id, f.Summa, f.Date
order by f.Date

в принципе это нетрудно переделать если платежи в отделной таблице храняться
...
Рейтинг: 0 / 0
Запросец, который завел меня в тупик
    #32036265
Roman M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем, подтолкнули на верный путь.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запросец, который завел меня в тупик
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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