Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Приходы-расходы / 5 сообщений из 5, страница 1 из 1
23.07.2002, 19:48:00
    #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
23.07.2002, 19:52:41
    #32038373
Сергей Тихонов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приходы-расходы
А с чего ты так решил? Где логика?
По-моему, в таблицах недостаточно инфы...
...
Рейтинг: 0 / 0
23.07.2002, 19:57:44
    #32038375
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приходы-расходы
Здесь что-то подобное было.
...
Рейтинг: 0 / 0
23.07.2002, 20:31:20
    #32038378
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приходы-расходы
Ой! Не надо столько таблиц! Надо одну таблицу с положительными числами приходов и отрицательными расходов
...
Рейтинг: 0 / 0
23.07.2002, 21:12:33
    #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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Приходы-расходы / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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