Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
ВнизПроцедура Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.998 c