Предполагая, что вы используете параметр для подобных предложений, первое, что я хотел бы изменить, - это утверждение, чтобы проверить, является ли оно нулевым, оно избежит всех других сравнений. Другим изменением будет удаление вложенности. Вы можете добиться того же эффекта (я думаю, в любом случае) с помощью первого предложения Fetch.
ПРИМЕЧАНИЕ. Это не проверено, так как в данный момент у меня нет базы данных, но я уверен, что это сработает.
SELECT rownumber() OVER (ORDER BY pgmajdsc, item) AS ROW_NUM,
iline AS line, iitem AS item, pgmajdsc, ldesc AS manufacturer
FROM itemmast
LEFT JOIN itemweb on iline=line and iitem=item
JOIN linemst ON iline=lline
LEFT JOIN custord ON opline=iline AND opitem=iitem AND opcust='1234'
LEFT JOIN cartwdtl ON cwline=iline and cwitem=iitem and cwusr='foo' AND cwcust='1234'
LEFT JOIN itematr ON iline=ialine AND iitem=iaitem
LEFT JOIN prodgrp ON iaclass=pgclass
WHERE ico = 01
AND iecomm = 'Y'
AND (parameter IS NULL
OR (UPPER(ITEMDESC) LIKE '%'||parameter||'%'
OR UPPER(PRODDESC) LIKE '%'||parameter||'%'
OR LINE LIKE '%'||parameter||'%'
OR UPPER(MFGNAME) LIKE '%'||parameter||'%'
OR ITEM LIKE '%'||parameter||'%'
OR PRODNAME LIKE '%'||parameter||'%'
OR IDESC1 LIKE '%'||parameter||'%'
OR IDESC2 LIKE '%'||parameter||'%'
OR IMFGNO LIKE '%'||parameter||'%'
OR IITEM LIKE '%'||parameter||'%') )
ORDER BY ROW_NUM, pgmajdsc, item
FETCH FIRST 25 ROWS ONLY
РЕДАКТИРОВАТЬ: Другая мысль заключается в том, что если вам не нужен номер строки, вы можете его опустить и просто выполнить свой заказ следующим образом:
SELECT iline AS line, iitem AS item, pgmajdsc, ldesc AS manufacturer
FROM itemmast
LEFT JOIN itemweb on iline=line and iitem=item
JOIN linemst ON iline=lline
LEFT JOIN custord ON opline=iline AND opitem=iitem AND opcust='1234'
LEFT JOIN cartwdtl ON cwline=iline and cwitem=iitem and cwusr='foo' AND cwcust='1234'
LEFT JOIN itematr ON iline=ialine AND iitem=iaitem
LEFT JOIN prodgrp ON iaclass=pgclass
WHERE ico = 01
AND iecomm = 'Y'
AND (parameter IS NULL
OR (UPPER(ITEMDESC) LIKE '%'||parameter||'%'
OR UPPER(PRODDESC) LIKE '%'||parameter||'%'
OR LINE LIKE '%'||parameter||'%'
OR UPPER(MFGNAME) LIKE '%'||parameter||'%'
OR ITEM LIKE '%'||parameter||'%'
OR PRODNAME LIKE '%'||parameter||'%'
OR IDESC1 LIKE '%'||parameter||'%'
OR IDESC2 LIKE '%'||parameter||'%'
OR IMFGNO LIKE '%'||parameter||'%'
OR IITEM LIKE '%'||parameter||'%') )
ORDER BY pgmajdsc, item
FETCH FIRST 25 ROWS ONLY
Я не знаю, насколько сильно сказывается производительность при расчете числа, но если вам это не нужно, возвращать его не нужно.