|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
Имеется форма на которой около 100 вычисляемых полей. Каждое поле имеет свой индивидуальный алгоритм расчета. Имеется запрос, который возвращает набор данных, из которого затем можно в цикле высчитать каждое из 100 полей и вернуть в соответствующее поле формы. Все это напоминает мне методы классического asp и вообще процедурного программирования. Внимание вопрос: можно ли как то обойти подобную ситуацию и придумать что нибудь правильнее цикла с 100 переменных?
С уважением,
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
А чем именно цикл не устраивает раз у тебя именно такой алгоритм?
Если расчет несложные, то можно их на sql переложить.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
Алгоритм расчета, который я изложил, придуман мной "на коленке". Подозреваю, что есть способы поумнее моего.Насколько я понял из Вашего предложения по sql, мой запрос нужно переписать в хранимую процедуру с параметрами, или оформить в виде представления\view и затем использовать для написания другого запроса с использованием sum,avg,min,max,count итд.
К сожалению, сам я не в курсе, как оформить этот запрос в виде хранимой параметрической процедуры DB2:
[bold](все даты переменные)[/bold]
main_kvo5_sql = _
"SELECT P.PRM_Id, P.PRM_IdN, P.PRM_IdP, S.VName AS Name_S, T.VName AS Name_M" _
& ", T.Marka, T.Gruz, T.Dlin_Prol, T.Vis_Pod, T.Emk_Kovsh, T.Vylet" _
& ", P.Invent_Nom, P.Reg_Nom, P.Zavod_Nom" _
& ", P.Month_Vipusk, P.Year_Vipusk" _
& ", CAST(P.Month_Vipusk AS CHAR(2)) || '.'||" _
& "CAST( P.Year_Vipusk AS CHAR(4)) AS Date_Izg" _
& ", D.Object_Vname AS Name_U, P.Month_Vvoda, P.Year_Vvoda" _
& ", CAST(P.Month_Vvoda AS CHAR(2)) || '.'||" _
& "CAST( P.Year_Vvoda AS CHAR(4)) AS Date_W" _
& ", P.Month_KR, P.Year_KR" _
& ", CAST(P.Month_KR AS CHAR(2)) || '.'||" _
& "CAST( P.Year_KR AS CHAR(4)) AS Date_KR" _
& ", P.Month_PTR, P.Year_PTR" _
& ", CAST(P.Month_PTR AS CHAR(2)) || '.'||" _
& "CAST( P.Year_PTR AS CHAR(4)) AS Date_PTR" _
& ", P.Month_Spis, P.Year_Spis" _
& ", CAST(P.Month_Spis AS CHAR(2)) || '.'||" _
& "CAST( P.Year_Spis AS CHAR(4)) AS Date_Sp" _
& ", P.Stoim_Perv, P.Stoim_Ostat, P.Amort, P.Iz_OF" _
& ", Z.Name AS Name_Z, P.Stan_Id, P.Pred_Id, P.PRM_Tip_Id" _
& ", T.Zavod_Id, P.Usl_Rab_Id, T.PRM_Kod" _
& ", M.Otr_Kod, M.Name AS Name_MTh, M.SName AS SName_MTh, P.Flag_KT" _
& ", R.PerTn001, R.PerTn002, R.PerTn003, R.PerTn004, R.PerTn005, R.PerTn006" _
& ", R.PerTn007, R.PerTn008, R.PerTn009, R.PerTn010, R.PerTn011, R.PerTn012" _
& ", R.PerTn101, R.PerTn102, R.PerTn103, R.PerTn104, R.PerTn105, R.PerTn106" _
& ", R.PerTn107, R.PerTn108, R.PerTn109, R.PerTn110, R.PerTn111, R.PerTn112" _
& ", R.PerTn201, R.PerTn202, R.PerTn203, R.PerTn204, R.PerTn205, R.PerTn206" _
& ", R.PerTn207, R.PerTn208, R.PerTn209, R.PerTn210, R.PerTn211, R.PerTn212" _
& ", ( R.PerTn101+R.PerTn102+R.PerTn103+R.PerTn104" _
& "+R.PerTn105+R.PerTn106+R.PerTn107+R.PerTn108) AS PerTNSNG" _
& ", P.Date_CP" _
& "FROM IM00.PRM_All P LEFT JOIN IM00.PRM_RABOTA R ON P.PRM_Id=R.PRM_Id" _
& ", IM00.Stan_M S, IM00.PRM_Tip T, IC00.Pred Z, IC00.Pred M" _
& ", IM00.Dic_Objects D" _
& "WHERE P.Year_Vipusk>=1955 AND S.Stan_Id=P.Stan_Id AND" _
& "(D.Class_Id=711 AND D.Object_Kod=P.Usl_Rab_Id) AND" _
& "T.Zavod_Id=Z.Pred_Id AND T.PRM_Tip_Id= P.PRM_Tip_Id AND" _
& "P.Pred_Id=M.Pred_Id AND" _
& "P.Pred_Id=2515 AND" _
& "P.Date_ND<='2005-09-19-12.00.00' AND P.Date_KD>='2005-09-19-12.00.00' AND" _
& "S.Date_ND<='2005-09-19' AND S.Date_KD>='2005-09-19' AND" _
& "T.Date_ND<='2005-09-19-12.00.00' AND T.Date_KD>='2005-09-19-12.00.00' AND" _
& "D.Date_ND<='2005-09-19' AND D.Date_KD>='2005-09-19' AND" _
& "Z.Date_ND<='2005-09-19' AND Z.Date_KD>='2005-09-19'" _
& "ORDER BY S.VName, T.PRM_Kod, Date_Izg"
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
[quote="babken76"]Насколько я понял из Вашего предложения по sql, мой запрос нужно переписать в хранимую процедуру с параметрами, или оформить в виде представления\view и затем использовать для написания другого запроса с использованием sum,avg,min,max,count итд.[/quote]
Именно это я и имел в виду. Правда, совсем необязательно разбивать это на несколько процедур, можно и в одной все реаилизовать.
[quote="babken76"]К сожалению, сам я не в курсе, как оформить этот запрос в виде хранимой параметрической процедуры DB2: [bold](все даты переменные)z/bold][/quote]
DB2 совместима со стандартом SQL и создание храниой процедуры в ней будет выглядить так же в в любой другой СУБД
CREATE PROC calculateSmth
@Date_ND datetime
AS
SELECT P.PRM_Id ...
WHERE ... P.Date_ND<@Date_ND
Чтобы организовать расчет внутри одной процедуры нужно будет результат первого запроса занести во временную таблицу и далее работать с ней. Например
SELECT field1, field2, ..., fieldN INTO #tmpTable FROM tableName ...
SELECT max(field1) FROM #tmpTable
...
DROP TABLE #tmpTable
|
|
|
|