Форум: "Базы";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
Внизтяжелое условие в ХП Найти похожие ветки
← →
GanibalLector © (2004-07-20 01:51) [0]Имеется некая таблица партий товаров.
Поля...много их.Вот основные:
plu-char(5) // код товара
num-char(8) //партия
kol- NUMERIC(7,3) //кол-во
Выглядит примерно так:
1 15.07М 15,500
1 16.07М 12,000
2 16.07М 0,000
3 16.07М 45,000
3 02.04М -15,00
3 15.05М 0,00
Так вот,возникла необходимость удалять партии товаров где:
-кол-во равно нулю и существуют еще партии с таким-же кодом (т.е. что бы не оставить товар без партии)
-кол-во меньше нуля и существуют еще партии с таким-же кодом,
НО после удаления кол-во необходимо перекинуть с любую партию с таким же кодом.
Вот,написал для первого условия(где кол-во равно нулю):
CREATE PROCEDURE ZERO
AS
DECLARE VARIABLE M_PLU CHAR(5);
DECLARE VARIABLE M_NUM CHAR(8);
begin
for select plu,num from part where plu in(
select plu from part group by plu having count(plu)>1 ) and kol=0 into :M_PLU,:M_NUM do
delete from part where plu=:M_PLU and num=:M_NUM;
end
Как бы работает,но если все кол-во у партий с одинаковым кодом равно нулю,то все они удалятся.Что не есть хорошо.
Т.е. если так:
5 02.07М 0,000
5 03.07М 0,000
то,все удалится.А нужно одну оставить.
А вот что делать со вторым условием в котором переброс в любую партию с таким же кодом???Тут даже ума не приложу.
Хотелось бы услышать советов.Спасибо!!!
← →
ЮЮ © (2004-07-20 02:37) [1]запрос
SELECT plu, num, SUM(kol) kol
FROM part group by num, plu
HAVING SUM(kol) <> 0
отобразит твою тавлицу в том виде, как ты желаешь (но я бы не пожелал даже врагу :). Остается дело за малым - залить это в таблицу вместо того, что там есть
← →
GanibalLector © (2004-07-20 02:51) [2]>Остается дело за малым - залить это в таблицу вместо того, что там есть
И как?
← →
ЮЮ © (2004-07-20 03:20) [3]А оно надо? Завтра опять появится запись для уже существующего товара существующей партии. И что, начинать заново? Просто показывай этот запрос вместо таблицы.
P/S. И не жалко удалять информацию которую кто-то с таким трудои вводил? :)
← →
GanibalLector © (2004-07-20 09:32) [4]2 ЮЮ
>И не жалко удалять информацию которую кто-то с таким трудои вводил?
Нет,не жалко.В процентном отношении по сравнению со всеми записями,причинных -5%.
2 ALL
А еще варианты есть???
← →
Наталия © (2004-07-20 09:36) [5]Ещё вариант - пересмотреть логику работы программы, чтобы таких записей вообще не создавать.
← →
bushmen © (2004-07-20 09:46) [6]Согласен с [5] - на этапе ввода можно проверять вводится ли нулевое количество товара, и если вводится, то не писать в базу.
← →
GanibalLector © (2004-07-20 10:24) [7]>пересмотреть логику работы программы
Невозможно!!!Там замес с кассовым аппаратом.Еще варианты есть???
← →
bushmen © (2004-07-20 11:13) [8]> Там замес с кассовым аппаратом.
А что, разве кассовый аппарат пробивает нулевое количество товара?
← →
GanibalLector © (2004-07-21 18:56) [9]Вот...родил этот код.5 часов,млин.Многовато что-то...
CREATE VIEW ZERO1(PLU,NUM)
AS
select plu,num from part where plu in(
select plu from part group by plu having count(plu)>1 ) and kol=0;
CREATE PROCEDURE ZERO2
RETURNS (
PLU CHAR(5) CHARACTER SET NONE,
NUM CHAR(8) CHARACTER SET NONE)
AS
DECLARE VARIABLE MM1 CHAR(5);
DECLARE VARIABLE MM CHAR(5);
begin
mm="";mm1="";
for select plu,num from part where plu in(
select plu from part group by plu having count(plu)>1 )
and kol=0 into :plu,:num do
begin
if ((plu=mm) and (mm<>mm1)) then begin
suspend;
mm1=mm;
end
mm=plu;
end
end
Теперь такой запрос выдаст "ДОЛГОЖДАННОЕ" желаемое :
select zero1.plu, zero1.num from ZERO1 left join zero2 on (zero1.num=zero2.num)
where zero2.num is null
Ну и,соответственно,запихнем все это в ХП:
CREATE PROCEDURE RUN_ZERO
AS
DECLARE VARIABLE V_PLU CHAR(5);
DECLARE VARIABLE V_NUM CHAR(8);
begin
for select zero1.plu, zero1.num from ZERO1 left join zero2 on (zero1.num=zero2.num)
where zero2.num is null into :V_PLU,:V_NUM do
delete from part where plu=:v_plu and num=:v_num;
end
Намана-> execute procedure RUN_ZERO
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.032 c