Помогите с запросом плиз!!!!

serega_od
Дата: 24.01.2009 18:16:54
Всем привет! В MS SQL 2005 есть таблица с полями - дата, сумма, тип - пример:
Дата Сумма Тип
02.01.2009 10000 Приход
02.01.2009 8000 расход
08.01.2009 12000 Приход
09.01.2009 5000 расход
14.01.2009 7000 Приход
15.01.2009 10000 расход
20.01.2009 15000 Приход
21.01.2009 6000 расход

Подскажите пожалуйста какой должен быть запрос чтоб получилась выборка типа:

Дата прих. Сумма Дата расх. Сумма
02.01.2009 10000 02.01.2009 8000
08.01.2009 12000 09.01.2009 5000
14.01.2009 7000 15.01.2009 10000
20.01.2009 15000 21.01.2009 6000
25.01.2009 20000 26.01.2009 22000

Заранее огромное спасибо!
Гавриленко Сергей Алексеевич
Дата: 24.01.2009 18:35:02
А для этого что должно получиться?
02.01.2009 10000 Приход
02.01.2009 1000 расход
03.01.2009 1000 расход
04.01.2009 1000 расход
05.01.2009 1000 расход
06.01.2009 1000 расход
07.01.2009 1000 расход
07.01.2009 1000 расход
07.01.2009 1000 расход
08.01.2009 12000 Приход
09.01.2009 5000 расход
14.01.2009 7000 Приход
15.01.2009 10000 расход
20.01.2009 15000 Приход
21.01.2009 6000 расход
dmsnet
Дата: 24.01.2009 18:40:40
1. а если приходов меньше например то что нулами забивать ?
2. Есть ли связь между приходом и расходом ?
dmsnet
Дата: 24.01.2009 18:42:37
быть может вам нужно по днях общий приход и общий расход .. проссумировать (если за день было несколько приходов и расходов) ?
dmsnet
Дата: 24.01.2009 18:44:02
вот это хуже всего если человек не может сформулировать что надо ...
serega_od
Дата: 24.01.2009 18:56:10
Конечно может быть и несколько, но для начала надо с этим разабраться потом усложнять запрос
dmsnet
Дата: 24.01.2009 18:56:54
Воощем если надо просуммировать расход-приход по днях то я бы сделал вот так :

select a.date, sum(a.sum_), a.type, sum(b.sum_), b.type from table a
left join table b on a.date=b.date and b.type ='DEBET'
where a.type='CREDIT'
group by a.date, a.type, b.type

как один из вариантов ... но если в дате присутствует еще и время то надо его отсечь...
dmsnet
Дата: 24.01.2009 19:01:28
dmsnet
Воощем если надо просуммировать расход-приход по днях то я бы сделал вот так :

select a.date, sum(a.sum_), a.type, sum(b.sum_), b.type from table a
left join table b on a.date=b.date and b.type ='DEBET'
where a.type='CREDIT'
group by a.date, a.type, b.type

как один из вариантов ... но если в дате присутствует еще и время то надо его отсечь...


аяяй не слушайте меня ... проглючило ... вредно работать по субботах .....
уточните условия ... а скрипт шо написал в топку .... :-)
serega_od
Дата: 26.01.2009 10:18:58
Как написал Гавриленко Сергей Алексеевич и dmsnet если расходов больше чем приходов , то да надо забивать нулами. Тогда будет что-то вроде этого:

дата прих. Сумма прих. дата расх. с расх.
02.01.2009 10000 03.01.2009 8000
null null 04.01.2009 2000
null null 06.01.2009 3000
08.01.2009 12000 09.01.2009 5000
14.01.2009 7000 15.01.2009 10000
20.01.2009 15000 21.01.2009 6000
25.01.2009 20000 26.01.2009 22000
Гавриленко Сергей Алексеевич
Дата: 26.01.2009 11:19:21
declare @t table ( [Date] DateTime, Amount Decimal, [Type] VarChar(50) )
insert @t 
          select '2009.01.02', 10000, 'Приход'
union all select '2009.01.02', 1000, 'расход'
union all select '2009.01.03', 1000, 'расход'
union all select '2009.01.04', 1000, 'расход'
union all select '2009.01.05', 1000, 'расход'
union all select '2009.01.06', 1000, 'расход'
union all select '2009.01.07', 1000, 'расход'
union all select '2009.01.07', 1000, 'расход'
union all select '2009.01.07', 1000, 'расход'
union all select '2009.01.08', 12000, 'Приход'
union all select '2009.01.09', 5000, 'расход'
union all select '2009.01.14', 7000, 'Приход'
union all select '2009.01.15', 10000, 'расход'
union all select '2009.01.20', 15000, 'Приход'
union all select '2009.01.21', 6000, 'расход'

select 
  [Inc].[Date] As [Дата прихода]
  , [Inc].[Amount] As [Сумма прихода]
  , [Out].[Date] As [Дата расхода]
  , [Out].[Amount] As [Сумма расхода]
from (
  select
    [Date], Sum([Amount]) as [Amount]
  from @t
  where [Type] = 'Приход'
  group by [Date]
) Inc
full outer join (
  select
    [Date], Sum([Amount]) as [Amount]
  from @t
  where [Type] = 'Расход'
  group by [Date]
) [Out] on Inc.[Date] = [Out].[Date]