Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите составить запрос на выборку  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
необходимо показать общие суммы незачтенных текущего и целевого аванса
и расписать их приход в обратном порядке (order by дата_поступления desc )
есть две таблицы : 1 - приход 2 - зачет авансов
алгоритм как я понимаю такой должен быть - найти суммы незачтенных авансов NZ (приход - зачет) и сравнивать потом эту сумму с приходом P отсортированным по убыванию по дате если NZ <= P то строка попадеат в результирующий набор
на клиенте это легко вышло -
For Each row As DataRowView In datav
   ta_post += row.Item(1)
   If ta_nez >= ta_post Then
      node_data = node_ng.AddChild
      node_data.Strings(0) = row.Item(0)
      node_data.Strings(2) = FormatNumber(row.Item(1), 1, TriState.True, TriState.False, TriState.True)
      node_data.Strings(3) = row.Item(2)
   End If
Next
а как это сделать на скл точнее с помощью чего?

К сообщению приложен файл. Размер - 0Kb
6 ноя 09, 19:29    [7894466]     Ответить | Цитировать Сообщить модератору
 Re: помогите составить запрос на выборку  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
на скл только осилил
declare @ta_nz decimal(10,1) -- сумма незачтенного текущего аванса
declare @ca_nz decimal(10,1) -- сумма незачтенного целевого аванса
--
set @ta_nz = 
(
	(
	 select isnull(sum(summa), 0)
	 from buh.oborot_den_sr
	 where id_ob = 53 and kod_t = 1 and kod_np = 2 -- тек аванс	 
	)
	-- сумма поступувшего аванса
	- -- минус
	-- сумма зачтенного аванса
	(
	 select isnull(sum(tek_av_z), 0)
	 from pldo_fin.ob_avans_zachet
	 where id_ob = 53 and god = 2009 and kod_mes < 11 
	)
)
set @ca_nz = 
(
	(
	 select isnull(sum(summa), 0)
	 from buh.oborot_den_sr
	 where id_ob = 53 and kod_t = 1 and kod_np = 3 -- цел аванс
	)
	-- сумма поступувшего аванса
	- -- минус
	-- сумма зачтенного аванса
	(
	 select isnull(sum(cel_av_z), 0)
	 from pldo_fin.ob_avans_zachet
	 where id_ob = 53 and god = 2009 and kod_mes < 11 
	)
)
--
select @ta_nz as 'ta_nz', @ca_nz as 'ca_nz'

select ods.data, ods.summa,
case ods.kod_np
when 2 then np.nazv_np + space(1) + 'на' + space(1) + nm.nazv_mes
when 3 then np.nazv_np
end as 'prim', ods.kod_np
from buh.oborot_den_sr as ods
inner join nw.nazn_plat as np
on ods.kod_np = np.kod_np
inner join nw.n_mes as nm
on ods.kod_mes = nm.kod_mes
where ods.id_ob = 53 and ods.kod_t = 1 and ods.kod_np in (2,3) -- and ods.data between @first_day_tg and @last_day_pm
order by data desc

ta_nz ca_nz
---------- ---------------------------------------
200000.0 1066000.0



data summa prim kod_np
----------- ----------- -------------------------- ------------
2009-10-28 200000.0 аванс текущий на октябрь 2
2009-10-26 200000.0 аванс текущий на ноябрь 2
2009-09-25 466000.0 аванс целевой 3
2009-09-22 600000.0 аванс целевой 3
2009-09-09 422000.0 аванс текущий на октябрь 2
2009-01-06 50000.0 аванс текущий на январь 2
6 ноя 09, 19:33    [7894481]     Ответить | Цитировать Сообщить модератору
 Re: помогите составить запрос на выборку  [new]
Ozzy-Osbourne
Member

Откуда: Balashikha
Сообщений: 139
koJIo6ok,

приведите, плз, скрипт создания таблиц со строками (что такое "приходы" ? "зачтённые" и "незачтённые" авансы ?), а также нарисуйте в чём-нибудь (хоть в экселе), _что_ Вы хотите в итоге получить.
ЗЫ. Сильно подозреваю, что по каждому авансу Вам надо искать "остаток", который от него будет в итоге зачёта сумм по реализации, на которые он оказался в итоге списан. Если этого "остатка" нет, то аванс списан полностью и в выборку НЕ попадает, так ?
6 ноя 09, 21:21    [7894764]     Ответить | Цитировать Сообщить модератору
 Re: помогите составить запрос на выборку  [new]
koJIo6ok
Member

Откуда: РБ
Сообщений: 950
Ozzy-Osbourne,
в первом посте рисунок - там видно что должно получиться, во втором набор данных виден...но да ладно на клиенте это легче в разы тем более все работает
9 ноя 09, 00:29    [7899275]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить