powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Приходы-расходы
5 сообщений из 5, страница 1 из 1
Приходы-расходы
    #32038372
SergCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ли решить следующую задачу без использования курсоров?
Есть база приходов
Код: plaintext
1.
2.
3.
4.
create table #In (Date datetime, Amount money)
insert #In values('20020101', 100 )
insert #In values('20020202', 200 )
insert #In values('20020303', 300 )
insert #In values('20020404', 400 )

и база расходов
Код: plaintext
1.
2.
3.
create table #Out (Date datetime, Amount money)
insert #Out values('20020210', 150 )
insert #Out values('20020310', 220 )
insert #Out values('20020410', 140 )

Необходимо получить таблицу с неизрасходованными приходами. В данном случае это будет
Код: plaintext
1.
 20020303     90 . 00 
 20020404    400 . 00 
...
Рейтинг: 0 / 0
Приходы-расходы
    #32038373
Фотография Сергей Тихонов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с чего ты так решил? Где логика?
По-моему, в таблицах недостаточно инфы...
...
Рейтинг: 0 / 0
Приходы-расходы
    #32038375
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь что-то подобное было.
...
Рейтинг: 0 / 0
Приходы-расходы
    #32038378
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой! Не надо столько таблиц! Надо одну таблицу с положительными числами приходов и отрицательными расходов
...
Рейтинг: 0 / 0
Приходы-расходы
    #32038381
SergCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример конечно же не из реальной жизни. Стоило бы ввести еще колонку id, но можно просто определиться, что колонка Date уникальная, тогда текст запроса сократиться. Да и таблица #Out не особенно нужна.
Большое спасибо VVG_, а особенно SergSuper за красивое решение.
Вот ответ на мой вопрос
Код: plaintext
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.
set nocount on
create table #In (Date datetime, Amount money)
insert #In values('20020101', 100 )
insert #In values('20020202', 200 )
insert #In values('20020303', 300 )
insert #In values('20020404', 400 )
create table #Out (Date datetime, Amount money)
insert #Out values('20020210', 150 )
insert #Out values('20020310', 220 )
insert #Out values('20020410', 140 )

declare @r money
select @r=sum(Amount) from #Out

set nocount off

select b.Date,
  case when sum(a.Amount)-b.Amount>@r
    then b.Amount
    else sum(a.Amount)-@r
  end
from #In a
join #In b on b.Date>=a.Date
group by b.Date, b.Amount
having sum(a.Amount)-@r>; 0 
order by b.Date

drop table #In
drop table #Out


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


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