Мне дается задача выяснить, у каких MOQ (минимальное количество заказа) меньше или меньше по сравнению с фиксированным MOQ. Сначала я использовал метод, который был while read () (используя c#) и go построчно.
Но он медленный, когда есть 60k записей.
Теперь я хочу обновить все за один раз вместо обновления и прочитать его построчно.
Это мой предыдущий код:
String cmdtxt8 = "SELECT MANUF_PART, MATERIAL FROM IR_MOQANS GROUP BY MANUF_PART, MATERIAL";
OracleDataReader odrget = db.read(cmdtxt8);
while (odrget.Read())
{
String cmdtxt9 = "UPDATE IR_MOQANS SET NOTE = 'GET'
WHERE MANUF_PART = '" + odrget.GetString(0) + "' AND MATERIAL = '" + odrget.GetString(1) + "'
AND BUOM_MOQ
<=
CAST ( (
SELECT BUOM_MOQ FROM IR_MOQANS
WHERE MANUF_PART = '" + odrget.GetString(0) + "' AND MATERIAL = '" + odrget.GetString(1) + "'
AND FIXD IS NOT NULL AND ROWNUM <= 1)
AS DECIMAL)";
db.execmd(cmdtxt9);
}
Это запрос, который я пробовал, но не ответил t работает (я хочу что-то вроде этого):
UPDATE IR_MOQANS SET DELTA = 'G'
WHERE SCALE_QTY
<=
(
SELECT BUOM_MOQ FROM IR_MOQANS WHERE (MANUF_PART, MATERIAL)
IN
(
SELECT MANUF_PART, MATERIAL FROM IR_MOQANS GROUP BY MANUF_PART, MATERIAL
)
AND FIXD IS NOT NULL AND ROWNUM <= 1
)
AND (MANUF_PART, MATERIAL)
IN
(
SELECT MANUF_PART, MATERIAL FROM IR_MOQANS GROUP BY MANUF_PART, MATERIAL
);
Ниже приведен пример моей таблицы:
manuf_part |material |fixd |buom_moq
-------------------------------------------
A |Pen |X |100
-------------------------------------------
A |Pen | |50
-------------------------------------------
A |Pen | |110
-------------------------------------------
A |Bag |X |200
-------------------------------------------
B |Cap | |20
-------------------------------------------
B |Cap |X |50
-------------------------------------------
B |Cap | |70
-------------------------------------------
Ожидаемый результат будет примерно таким:
manuf_part |material |fixd |buom_moq |note
--------------------------------------------------------
A |Pen |X |100 |GET
--------------------------------------------------------
A |Pen | |50 |GET
--------------------------------------------------------
A |Pen | |110 |
--------------------------------------------------------
A |Bag |X |200 |GET
--------------------------------------------------------
B |Cap | |20 |GET
--------------------------------------------------------
B |Cap |X |50 |GET
--------------------------------------------------------
B |Cap | |70 |
--------------------------------------------------------
Manuf_part и материал ДОЛЖНЫ быть сгруппированы, чтобы получить одну и ту же категорию. Например, (A, Pen) ДОЛЖНО сравниваться только с (A, Pen).