История изменений
Исправление WinLin2, (текущая версия) :
<code='SQL'>
table wu (id, manualinput)table wo (id, wu_id, valuefact)
table wp (id, wo_id, valuefact)
IF wu.manualinput = TRUE
THEN wo.valuefact
ELSE суммировать valuefact из wp
</code>
Вычисленное wo.valuefact суммируется также в других группировках
и есть таблица преобразований wu.id1 -> wu.id2 (голову сломаешь).
Создал функцию wo_valuefact() для вычисления valuefact.
На практике такое применяют?
<code SQL>
-- input: workotdel.id
-- return: valuefact
CREATE FUNCTION wo_valuefact (INTEGER) RETURNS SETOF NUMERIC AS $$
BEGIN
RETURN QUERY
SELECT
(CASE WHEN wu.manualinput = TRUE
THEN
wo.valuefact
ELSE
(
SELECT sum(wp.valuefact)
FROM workpeople wp
WHERE wp.workotdel_id = $1
)
END
)
FROM
workotdel wo,
workunit wu
WHERE
wo.workunit_id = wu.id
AND wo.id = $1;
END;
$$ LANGUAGE plpgsql;
</code>
Исправление WinLin2, :
<code SQL>
table wu (id, manualinput)
table wo (id, wu_id, valuefact)
table wp (id, wo_id, valuefact)
IF wu.manualinput = TRUE
THEN wo.valuefact
ELSE суммировать valuefact из wp
</code>
Вычисленное wo.valuefact суммируется также в других группировках
и есть таблица преобразований wu.id1 -> wu.id2 (голову сломаешь).
Создал функцию wo_valuefact() для вычисления valuefact.
На практике такое применяют?
<code SQL>
-- input: workotdel.id
-- return: valuefact
CREATE FUNCTION wo_valuefact (INTEGER) RETURNS SETOF NUMERIC AS $$
BEGIN
RETURN QUERY
SELECT
(CASE WHEN wu.manualinput = TRUE
THEN
wo.valuefact
ELSE
(
SELECT sum(wp.valuefact)
FROM workpeople wp
WHERE wp.workotdel_id = $1
)
END
)
FROM
workotdel wo,
workunit wu
WHERE
wo.workunit_id = wu.id
AND wo.id = $1;
END;
$$ LANGUAGE plpgsql;
</code>
Исходная версия WinLin2, :
<code=SQL>
table wu (id, manualinput)
table wo (id, wu_id, valuefact)
table wp (id, wo_id, valuefact)
IF wu.manualinput = TRUE
THEN wo.valuefact
ELSE суммировать valuefact из wp
</code>
Вычисленное wo.valuefact суммируется также в других группировках
и есть таблица преобразований wu.id1 -> wu.id2 (голову сломаешь).
Создал функцию wo_valuefact() для вычисления valuefact.
На практике такое применяют?
<code=SQL>
-- input: workotdel.id
-- return: valuefact
CREATE FUNCTION wo_valuefact (INTEGER) RETURNS SETOF NUMERIC AS $$
BEGIN
RETURN QUERY
SELECT
(CASE WHEN wu.manualinput = TRUE
THEN
wo.valuefact
ELSE
(
SELECT sum(wp.valuefact)
FROM workpeople wp
WHERE wp.workotdel_id = $1
)
END
)
FROM
workotdel wo,
workunit wu
WHERE
wo.workunit_id = wu.id
AND wo.id = $1;
END;
$$ LANGUAGE plpgsql;
</code>