Построить запрос (аналитика)

urslan
Дата: 26.11.2009 14:42:09
Уже второй день не сплю!
Помогите советом!

Есть следующие данные учета компьютеров,
где qnt > 0 - приход, иначе расход.
summa - общая стоимость прихода
rate - курс доллара
usd - соответственно сумма в у.е.
   	DATE_BGN	G_SNAME	MTRL_ID	NAME	QNT	SUMMA	RATE	USD
1	02.04.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	950	5.14986	184.471
2	02.04.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	950	5.14986	184.471
3	05.09.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1842.78	5.14986	357.831
4	12.09.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	392	5.14986	76.119
5	20.09.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	2	3087.084	5.14986	599.45
6	26.10.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1499.904	5.14986	291.251
7	26.10.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1499.904	5.14986	291.251
8	06.11.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1324.14	5.14986	257.122
9	13.12.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	2138.544	5.14986	415.263
10	12.01.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1898.388	5.14986	368.629
11	28.01.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1898.388	5.14986	368.629
12	04.09.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1842.78	5	368.556
13	04.09.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	-1	-1842.78	0	0
14	01.10.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	-1	-1842.78	0	0
15	01.10.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	-1	-2138.54	0	0
16	26.11.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1898.39	7.29927	260.079
17	26.11.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	-1	-1898.39	0	0
18	01.12.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1898.39	7.35294	258.181
19	01.12.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	-1	-1898.39	0	0
20	01.12.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	-1	-1898.39	0	0
21	01.12.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	-2	-1891.9	0	0

В строчках расхода стоят нули для курса и суммы у.е. потому как я уже голову сломал как их заполнить :(
Пытался разными способами получить нужные данные, но все куда-то не в ту степь лез.
В принципе хотелось бы получить средний курс на момент списания, но уже кипит чайник и сам них..на не соображаю. :(

Плиз, прошу помощи
suPPLer
Дата: 26.11.2009 14:45:53
urslan,

0. Желаемый результат в студию.
1. Откуда должен браться средний курс?
KIREAL
Дата: 26.11.2009 15:01:15
urslan
Уже второй день не сплю!
Помогите советом!

Есть следующие данные учета компьютеров,
где qnt > 0 - приход, иначе расход.
summa - общая стоимость прихода
rate - курс доллара
usd - соответственно сумма в у.е.
   	DATE_BGN	G_SNAME	MTRL_ID	NAME	QNT	SUMMA	RATE	USD
1	02.04.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	950	5.14986	184.471
2	02.04.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	950	5.14986	184.471
3	05.09.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1842.78	5.14986	357.831
4	12.09.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	392	5.14986	76.119
5	20.09.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	2	3087.084	5.14986	599.45
6	26.10.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1499.904	5.14986	291.251
7	26.10.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1499.904	5.14986	291.251
8	06.11.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1324.14	5.14986	257.122
9	13.12.2007	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	2138.544	5.14986	415.263
10	12.01.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1898.388	5.14986	368.629
11	28.01.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1898.388	5.14986	368.629
12	04.09.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1842.78	5	368.556
13	04.09.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	-1	-1842.78	0	0
14	01.10.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	-1	-1842.78	0	0
15	01.10.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	-1	-2138.54	0	0
16	26.11.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1898.39	7.29927	260.079
17	26.11.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	-1	-1898.39	0	0
18	01.12.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	1	1898.39	7.35294	258.181
19	01.12.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	-1	-1898.39	0	0
20	01.12.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	-1	-1898.39	0	0
21	01.12.2008	КОМП. ОБОРУД-ИЕ	1500	CPU Celeron 1.7GHz	-2	-1891.9	0	0

В строчках расхода стоят нули для курса и суммы у.е. потому как я уже голову сломал как их заполнить :(
Пытался разными способами получить нужные данные, но все куда-то не в ту степь лез.
В принципе хотелось бы получить средний курс на момент списания, но уже кипит чайник и сам них..на не соображаю. :(

Плиз, прошу помощи

Select

T1.DATE_BGN,
T1.G_SNAME,
T1.MTRL_ID,
T1.NAME,
T1.QNT,
Decode(T1.USD,0, T1.SUMMA/ Decode(T1.RATE,0,t2.RATE,t1.RATE), T1.SUMMA) as SUMMA,
Decode(T1.RATE, 0,t2.RATE,t1.RATE) as RATE

From

Table_source t1,

(select avg(RATE) RATE from Table_ where RATE>0) t2

                    
KIREAL
Дата: 26.11.2009 15:01:55
Промахнулся мимо тега
Select 

T1.DATE_BGN,
T1.G_SNAME,
T1.MTRL_ID,
T1.NAME,
T1.QNT,
Decode(T1.USD,0, T1.SUMMA/ Decode(T1.RATE,0,t2.RATE,t1.RATE), T1.SUMMA) as SUMMA,
Decode(T1.RATE, 0,t2.RATE,t1.RATE) as RATE

From 

Table_source t1,

(select avg(RATE) RATE  from Table_ where RATE>0) t2

Babe_Vampire
Дата: 26.11.2009 15:06:49
Средний курс на момент списания, имеется в виду средний курс по приходу на день списания или средний за какой-либо период?
KIREAL
Дата: 26.11.2009 15:18:09
(В предыдущем намудрил с названиями полей)

Если нужно просто средний курс:

Select 

T1.DATE_BGN,
T1.G_SNAME,
T1.MTRL_ID,
T1.NAME,
T1.QNT,
T1.SUMMA,
Decode(T1.RATE, 0,t2.RATE,t1.RATE) as RATE,
Decode(T1.USD,0, T1.SUMMA/ Decode(T1.RATE,0,t2.RATE,t1.RATE), T1.SUMMA) as USD

From 

Table_source t1,

(select avg(RATE) RATE  from Table_ where RATE>0) t2


Если нужно средний курс на момент списание(если еще возникают ограничения, сами их добавьте в: (select avg(t2.RATE) RATE from Table_ source t2 where t2.DATE_BGN<t1.DATE_BGN))

Select 
T3.DATE_BGN,
T3.G_SNAME,
T3.MTRL_ID,
T3.NAME,
T3.QNT,
T3.SUMMA,
T3. RATE,
Decode(T3.USD,0, T3.SUMMA/ T3. RATE, T3.USD)
from
( 
Select 

T1.DATE_BGN,
T1.G_SNAME,
T1.MTRL_ID,
T1.NAME,
T1.QNT,
T1.SUMMA,
Decode(T1.RATE, 0, 
(select avg(t2.RATE) RATE  from Table_ source t2 where t2.DATE_BGN<t1.DATE_BGN),
t1.RATE) as RATE,
T1.USD

From 

Table_source t1 ) t3


Не проверял работоспособность, просто мысли...
urslan
Дата: 26.11.2009 17:08:23
suPPLer
urslan,

0. Желаемый результат в студию.
1. Откуда должен браться средний курс?


Так с мыслями собрался теперь немного опишу задачу.

На склад приходуется товар, как правило в нац. валюте (грн).
руководство решило перевести учет в доллары.
Но тупо поделить не получится , т.к. налицо ситуация, когда мы приняли по 1900 грн (360 у.е. = курс 5,15) а продали по 1900 грн (260 у.е. = курс 7.30), а на самом деле нужно списать 360 у.е. а то в конце можем получить остаток 0, а в долларах у нас товара еще на 3000.

Но так как партионного учета нет и вести его никто не хочет, то хотелось бы получить в результате курс и сумму в пересчете на средние данные по предыдущим операциям.
Ну вот что у меня получилось сделать руками



сумма, грн Сумма, $ср.курс
1 02.04.2007 1 950.00 5.15 184.47 950.00 184.47 5.15
2 02.04.2007 1 950.00 5.15 184.47 1900.00 368.94 5.15
3 05.09.2007 1 1842.78 5.15 357.83 3742.78 726.77 5.15
4 12.09.2007 1 392.00 5.15 76.12 4134.78 802.89 5.15
5 20.09.2007 2 3087.08 5.15 599.45 7221.86 1402.34 5.15
6 26.10.2007 1 1499.90 5.15 291.25 8721.77 1693.59 5.15
7 26.10.2007 1 1499.90 5.15 291.25 10221.67 1984.84 5.15
8 06.11.2007 1 1324.14 5.15 257.12 11545.81 2241.97 5.15
9 13.12.2007 1 2138.54 5.15 415.26 13684.36 2657.23 5.15
10 12.01.2008 1 1898.39 5.15 368.63 15582.74 3025.86 5.15
11 28.01.2008 1 1898.39 5.15 368.63 17481.13 3394.49 5.15
12 04.09.2008 1 1842.78 5.00 368.56 19323.91 3763.04 5.14
13 04.09.2008 -1 -1842.78 0.00 0.00 17481.13 3404.19 5.14
14 01.10.2008 -1 -1842.78 0.00 0.00 15638.35 3045.34 5.14
15 01.10.2008 -1 -2138.54 0.00 0.00 13499.81 2628.89 5.14
16 26.11.2008 1 1898.39 7.30 260.08 15398.20 2888.97 5.33
17 26.11.2008 -1 -1898.39 0.00 0.00 13499.81 2532.80 5.33
18 01.12.2008 1 1898.39 7.35 258.18 15398.20 2790.98 5.52
19 01.12.2008 -1 -1898.39 0.00 0.00 13499.81 2446.89 5.52
20 01.12.2008 -1 -1898.39 0.00 0.00 11601.42 2102.80 5.52
21 01.12.2008 -2 -1891.90 0.00 0.00 9709.52 1759.88 5.52
suPPLer
Дата: 26.11.2009 18:09:53
urslan,

у Вас, похоже, очень продвинутое руководство. А разве можно вести учёт товарных остатков и операций в какой-либо валюте, кроме национальной? Я просто не в курсе подобного. Обычно ведут в национальной валюте, переводя операции в иностранной валюте в национальную, используя курс на день проведения операции.

IMHO, Вам всё же понадобится таблица с курсами валют по дням. А то все эти средние данные потом очень больно дадут о себе знать...
urslan
Дата: 26.11.2009 19:07:54
suPPLer

IMHO, Вам всё же понадобится таблица с курсами валют по дням. А то все эти средние данные потом очень больно дадут о себе знать...


1) Таблица есть. То, что я выложил - вьюха построенная на N-таблицах.
2) Оно уже дало знать. В финансовой программе аналитика по у.е. дает курс 0.7 при фактическом 8.15 :):(

Поэтому и хотелось пересчитать продажи по среднему курсу, а не на день продажи.

А по поводу внутреннего учета в валюте отличной от национальной - это требование инвестора. :(
urslan
Дата: 26.11.2009 22:40:18
Блин, только что обломался :(
База крутится на 9.2.0.1, а клиент 8.0.5 и не "хавает" аналитические функции :(

Ну значит одна дорога - PL/SQL :)