Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.27;
Скачать: CL | DM;

Вниз

Процедура   Найти похожие ветки 

 
Marat ©   (2007-05-11 13:07) [0]

Есть процедура:
CREATE PROCEDURE UpCalcInt
--@prazn real
AS
declare @prazn real
set @prazn=(select case when month(dbo.Internet.Date_Contract)=4 and year(dbo.Internet.Date_Contract)=2007
and month(dbo.Internet.Date_Close)=4 and year(dbo.Internet.Date_Close)=2007 and dbo.Internet.Excpt=1
then dbo.Tarif_Int.Pred_trafic*1024/30*(day(dbo.Internet.Date_Close)-day(dbo.Internet.Date_Contract)+1)
when month(dbo.Internet.Date_Contract)=4 and year(dbo.Internet.Date_Contract)=2007
and month(dbo.Internet.Date_Close)<>4 and year(dbo.Internet.Date_Close)<>2007 and dbo.Internet.Excpt=1
then dbo.Tarif_Int.Pred_trafic*1024/30*(30-day(dbo.Internet.Date_Contract)+1)
when month(dbo.Internet.Date_Contract)<>4 and year(dbo.Internet.Date_Contract)<>2007
and month(dbo.Internet.Date_Close)=4 and year(dbo.Internet.Date_Close)=2007 and dbo.Internet.Excpt=1
then dbo.Tarif_Int.Pred_trafic*1024/30*day(dbo.Internet.Date_Close)
when month(dbo.Internet.Date_Contract)=4 and year(dbo.Internet.Date_Contract)=2007
and dbo.Internet.Excpt=0
then dbo.Tarif_Int.Pred_trafic*1024/30*(30-day(dbo.Internet.Date_Contract)+1)
end  
FROM dbo.Tarif_Int right outer JOIN dbo.Internet ON dbo.Tarif_Int.ID=
dbo.Internet.Tarif_ID left outer JOIN
dbo.Abonent ON dbo.Internet.Abonent_Bill = dbo.Abonent.Bill left outer JOIN
dbo.PredInt_200704 PredInt ON dbo.Internet.Login = PredInt.Login_Vlan
where ((dbo.Internet.Excpt=0 and PredInt.Session_Start>=dbo.Internet.Date_Contract)
or (dbo.Internet.Excpt=1 and PredInt.Session_Start<=dbo.Internet.Date_Close))
GROUP BY dbo.Abonent.Bill, dbo.Tarif_Int.Pred_trafic, dbo.Tarif_Int.Price_10,
dbo.Tarif_Int.Price_10_NDS, dbo.Internet.Excpt,
dbo.Internet.Login,dbo.Internet.Date_Contract,dbo.Internet.Date_Close
HAVING (dbo.Tarif_Int.Price_10 <> 0) AND
((SUM(PredInt.In_Byte) - dbo.Tarif_Int.Pred_trafic * 1024 > 0) or
(SUM(PredInt.Out_Byte) - dbo.Tarif_Int.Pred_trafic * 1024>0))
and dbo.Abonent.Bill=7000369)

SELECT dbo.Abonent.Bill,SUM(PredInt.In_Byte) AS InByte,SUM(PredInt.Out_Byte) AS OutByte,
case when month(dbo.Internet.Date_Contract)=4 and year(dbo.Internet.Date_Contract)=2007
and month(dbo.Internet.Date_Close)=4 and year(dbo.Internet.Date_Close)=2007 and dbo.Internet.Excpt=1
then dbo.Tarif_Int.Pred_trafic*1024/30*(day(dbo.Internet.Date_Close)-day(dbo.Internet.Date_Contract)+1)

when month(dbo.Internet.Date_Contract)=4 and year(dbo.Internet.Date_Contract)=2007
and month(dbo.Internet.Date_Close)<>4 and year(dbo.Internet.Date_Close)<>2007 and dbo.Internet.Excpt=1
then dbo.Tarif_Int.Pred_trafic*1024/30*(30-day(dbo.Internet.Date_Contract)+1)
 
when month(dbo.Internet.Date_Contract)<>4 and year(dbo.Internet.Date_Contract)<>2007
and month(dbo.Internet.Date_Close)=4 and year(dbo.Internet.Date_Close)=2007 and dbo.Internet.Excpt=1
then dbo.Tarif_Int.Pred_trafic*1024/30*day(dbo.Internet.Date_Close)

when month(dbo.Internet.Date_Contract)=4 and year(dbo.Internet.Date_Contract)=2007
and dbo.Internet.Excpt=0
then dbo.Tarif_Int.Pred_trafic*1024/30*(30-day(dbo.Internet.Date_Contract)+1)

end as ddd1,
dbo.Tarif_Int.Pred_trafic*1024 as ddd,
case when SUM(PredInt.In_Byte-PredInt.InByte_Old)>SUM(PredInt.Out_Byte-PredInt.OutByte_Old) then
CEILING((SUM(PredInt.In_Byte-PredInt.InByte_Old)-
@prazn*1024)/10)*10
else CEILING((SUM(PredInt.Out_Byte-PredInt.OutByte_Old)-@prazn*1024)/10)*10
end AS razn,
dbo.Tarif_Int.Price_10, dbo.Tarif_Int.Price_10_NDS, dbo.NDS.NDS,
case when SUM(PredInt.In_Byte)>SUM(PredInt.Out_Byte) then
round(((CEILING((SUM(PredInt.In_Byte) - dbo.Tarif_Int.Pred_trafic * 1024)/10)*10)/10)
*(dbo.Tarif_Int.Price_10_NDS*(100+dbo.NDS.NDS)/100),2)
else
round(((CEILING((SUM(PredInt.Out_Byte) - dbo.Tarif_Int.Pred_trafic * 1024)/10)*10)/10)
*(dbo.Tarif_Int.Price_10_NDS*(100+dbo.NDS.NDS)/100),2)
end AS dopl,dbo.Internet.Login,dbo.Internet.Excpt  

FROM dbo.Tarif_Int right outer JOIN dbo.Internet ON dbo.Tarif_Int.ID=
dbo.Internet.Tarif_ID left outer JOIN
dbo.Abonent ON dbo.Internet.Abonent_Bill = dbo.Abonent.Bill left outer JOIN
dbo.PredInt_200704 PredInt ON dbo.Internet.Login = PredInt.Login_Vlan
CROSS JOIN dbo.NDS
where ((dbo.Internet.Excpt=0 and PredInt.Session_Start>=dbo.Internet.Date_Contract)
or (dbo.Internet.Excpt=1 and PredInt.Session_Start<=dbo.Internet.Date_Close))
GROUP BY dbo.Abonent.Bill, dbo.Tarif_Int.Pred_trafic, dbo.Tarif_Int.Price_10,
dbo.Tarif_Int.Price_10_NDS, dbo.NDS.NDS,dbo.Internet.Excpt,
dbo.Internet.Login,dbo.Internet.Date_Contract,dbo.Internet.Date_Close
HAVING (dbo.Tarif_Int.Price_10 <> 0) AND
((SUM(PredInt.In_Byte) - dbo.Tarif_Int.Pred_trafic * 1024 > 0) or
(SUM(PredInt.Out_Byte) - dbo.Tarif_Int.Pred_trafic * 1024>0))
and dbo.Abonent.Bill=7000369
GO
т.е. я хочу использовать локальную переменную в выборке.
Делаю это неправильно, потому как получаю поле razn=null а должно получиться число.
Может быть так делать совсем нельзя. Тогда как можно?


 
Marat ©   (2007-05-11 14:54) [1]

может быть у кого-то есть "живой" пример использования вычисляемого параметра в процедуре? По инету шарил не нашел.


 
DVM ©   (2007-05-11 15:24) [2]

Мда... Ты думаешь кто-то станет вникать в написанное выше?


 
Ega23 ©   (2007-05-11 15:34) [3]

Жжошь!
Распечатал, повесил на стенке. В назидание.


 
Ega23 ©   (2007-05-11 15:37) [4]


> Делаю это неправильно, потому как получаю поле razn=null
> а должно получиться число.


Скорее всего всё правильно ты получаешь. Просто выборка пустая. А раз пустая, то значение не меняется.
После Declare поставь Set @razn=0;
И не Set, а Select



Страницы: 1 вся ветка

Текущий архив: 2007.05.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
3-1173768325
lightix
2007-03-13 09:45
2007.05.27
Изменить LANGDRIVER для DBase


11-1160134748
Thaddy
2006-10-06 15:39
2007.05.27
tip to reduce memory when inactive.


6-1163929428
-~-
2006-11-19 12:43
2007.05.27
Пара вопросов про ICS (TWSocket).


1-1175582214
kyn66
2007-04-03 10:36
2007.05.27
Многоэтажные строки DBGrigEh


5-1154280091
askfor
2006-07-30 21:21
2007.05.27
проблема с desingEditor и Proxies..