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

Откуда:
Сообщений: 43
Здравствуйте!
Есть таблица "Передача оборудования в аренду" с полями:

Таблица 1
Date Mov KagCd Nom PlSum
06.06.1112301200
07.06.1112302100
08.06.1112303200
08.07.1112304100
09.07.1122302200

где Date - дата движения оборудования, Mov - тип движения (1 - передача в аренду, 2 - возврат от контрагента, как мы видим оборудование №2 сначала выдали 06.06.11, а потом вернули 09.07.11),
KagCd - код контрагента, Nom - код оборудования, PlSum - плановая сумма (под это оборудование поставляется продукция, которая в нем хранится), показатель за месяц использования.
Нужно получить примерно следующий итог, в разрезе контрагента за год(по месяцам):
Mon KagCd PlSumma
Июнь23200
Июль23100

Mon - месяц, PlSumma - это общая сумма за месяц, и нужно учитывать, что если оборудование выдано не первого числа месяца, например 06.06, то нужно пересчитать плановый показатель на этот месяц(не 30 дн. в аренде, а только 24 дня), то есть как мы видим из табл. 1, каждую строчку надо пересчитать..Плюс если оборудование не возвращено, то каждую последующую сумма по месяцу мы должны брать с учетом, ранее выданного оборудования...И делать поправку, если его вернули обратно на склад...
Запутался я во всем этом...( Подкиньте идеи, мысли пожалуйста, как это лучше всего автоматизировать...
Заранее спасибо, надеюсь на вашу поддержку!
18 июл 11, 16:48    [10990526]     Ответить | Цитировать Сообщить модератору
 Re: Учет арендуемого оборудования (с итогом по месяцам)  [new]
aleks2
Guest
Преобразуйте свою таблицу в форму

Оборудование, Плановая сумма..., ДатаНачала, Дата конца

и будет вам щастье.
18 июл 11, 17:16    [10990811]     Ответить | Цитировать Сообщить модератору
 Re: Учет арендуемого оборудования (с итогом по месяцам)  [new]
MrBlackJack
Member

Откуда:
Сообщений: 43
Ну в общем это не сложно и запросом получить...Получим период 07.06.11 - 09.07.11 например, а до этого ему еще было выданно оборудование 08.06, 08.07...Получим следующее
DateBegin DateEnd Mov KagCd Nom PlSum
06.06.11 null 1 23 01 200
07.06.11 09.07.11 1 23 02 100
08.06.11 null 1 23 03 200
08.07.11 null 1 23 04 100


Как автоматизировать получения общей суммы скажем за июль? Естественно с учетом условий, которые я писал в первом посте...
Например если оборудование №01 выдано 06.06, то нужно считать, что в июне оно было в аренде 24 дня, а в июле уже 31...
18 июл 11, 17:33    [10990935]     Ответить | Цитировать Сообщить модератору
 Re: Учет арендуемого оборудования (с итогом по месяцам)  [new]
aleks2
Guest
MrBlackJack
Как автоматизировать получения общей суммы скажем за июль? Естественно с учетом условий, которые я писал в первом посте...
Например если оборудование №01 выдано 06.06, то нужно считать, что в июне оно было в аренде 24 дня, а в июле уже 31...


У вас проблемы с вычислением пересечения двух интервалов?
Или начало-конец месяца затрудняетесь определить?
18 июл 11, 18:03    [10991111]     Ответить | Цитировать Сообщить модератору
 Re: Учет арендуемого оборудования (с итогом по месяцам)  [new]
MrBlackJack
Member

Откуда:
Сообщений: 43
Да...Не понимаю, как найти сумму за период 06.06.11 - 08.07.11 и сгруппировать их именно как сумма за июль...Что - то вообще ничего толкового не приходит на ум...
18 июл 11, 20:34    [10991732]     Ответить | Цитировать Сообщить модератору
 Re: Учет арендуемого оборудования (с итогом по месяцам)  [new]
MrBlackJack
Member

Откуда:
Сообщений: 43
Горю, ребят..(
19 июл 11, 09:19    [10992829]     Ответить | Цитировать Сообщить модератору
 Re: Учет арендуемого оборудования (с итогом по месяцам)  [new]
smls
Guest
MrBlackJack,

Если без учета годов, то как-то так :

declare @t table (d datetime,mov int,KagCd int ,Nom varchar(3),PlSum numeric)

insert @t select '20110606', 1, 23, '05', 200
union all
select '20110606', 1, 23, '01', 200
union all
select '20110607', 1, 23, '02', 100
union all
select '20110608', 1, 23, '03', 200
union all
select '20110708', 1, 23, '04', 100
union all
select '20110809', 2, 23, '02', 200
declare @t2 table (m int)
insert @t2
select 1 union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6 union all
select 7 union all
select 8 union all
select 9 union all
select 10 union all
select 11 union all
select 12

; with pr as (select t2.m,zz.KagCd,
sum(case when t2.m=zz.mb then zz.sb else case when t2.m=zz.me then zz.se else zz.PlSum end end) RSum
from @t2 t2 left join
(select t.PlSum,t.KagCd,
month(t.d) mb, (t.PlSum/day(dateadd(d,-day(dateadd(m,1,t.d)),dateadd(m,1,t.d))))*
(datediff(d,t.d,dateadd(d,-day(dateadd(m,1,t.d)),dateadd(m,1,t.d)))) sb,
month(t2.d) me, (t.PlSum/day((dateadd(d,-day(dateadd(m,1,t2.d)),dateadd(m,1,t2.d)))))*day(t2.d) se
from @t t left join @t t2 on t.KagCd=t2.KagCd and
t.nom=t2.nom and t2.mov=2
where t.mov=1) zz on t2.m>=zz.mb and (t2.m<=zz.me or zz.me is null)
group by t2.m,zz.KagCd)

select datename(m,dateadd(m,p.m,'18991231')),p.RSum 'Сумма месячная',
(select sum(p2.RSum) from pr p2 where p2.m<=p.m) 'Сумма с накоплением' from pr p
19 июл 11, 13:43    [10994712]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить