Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1177418638
ALLON
2007-04-24 16:43
2007.05.27
работа Delphi в ограниченом юзере


15-1177413172
umbra
2007-04-24 15:12
2007.05.27
ассемблер


3-1173433849
Крик
2007-03-09 12:50
2007.05.27
Interbase / выборка типа mysql_fetch_array()


2-1178830774
Ламер 2.Х
2007-05-11 00:59
2007.05.27
Справка


15-1177653950
Odinus
2007-04-27 10:05
2007.05.27
Dreamweaver





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский