Возникли проблемы с простым предложением WHERE - PullRequest
1 голос
/ 31 января 2020

Я схожу с ума по этому поводу, и я знаю, что это небольшое исправление. Ниже мой код SQL, и у меня возникают проблемы при вставке предложения where (where feed_opn_9132 = 'TOHO')

Этот код выполняет то, что я хочу, но не отображает данные feed_opn_9132 = 'TOHO '. Может кто-нибудь помочь мне с этим?

Заранее спасибо !! Код:

SELECT device, fsi_opns,
CASE WHEN opn_wip IS NULL THEN 0 ELSE opn_wip END AS opn_wip, 
feed_opn_9109, feed_opn_9132, feed_opn_9122, feed_opn_9131, feed_opn_9124, starting_material, boat, sort_opns, in_bank, plan_bank, in_bank-plan_bank AS DELTA, loop
from
(SELECT a.device, a.fsi_opns, c.opn_wip, a.feed_opn_9109, a.feed_opn_9132, a.feed_opn_9122, a.feed_opn_9131, a.feed_opn_9124, a.starting_material, a.sort_opns, b.in_bank, d.plan_bank, d.loop, a.boat
from

(SELECT device, fsi_opns, feed_opn_9109, feed_opn_9132, feed_opn_9122, feed_opn_9131, feed_opn_9124, starting_material, sort_opns, BOAT 
FROM pilot_feed_opn
Where feed_opn_9132 = 'TOHO') a,

    (SELECT device, Sum(in_qty) AS in_bank
    FROM LOT_MOVE_AGE@smsdwde2.itg.ti.com
    WHERE facility = 'DP1DM5'

    AND device = ANY(SELECT device
                              FROM dm_device_attributes@smsdwde2.itg.ti.com
                              WHERE facility = 'DP1DM5'
                              AND status = 'A'
                              AND family LIKE 'PILOT%'
                              )
    AND departure_dttm IS null AND latest = 'O'
    AND (lpt = ANY(SELECT lpt
                    FROM pilot_lpts
                    WHERE facility = 'DP1DM5'
                    AND category = 'Bank'
                    )
    OR opn = ANY('0048','9050'))
    GROUP BY device
    ORDER BY device) b,

(select device, Sum(in_qty) AS opn_wip
FROM LOT_MOVE_AGE@smsdwde2.itg.ti.com
WHERE facility = 'DP1DM5'
AND device = ANY(SELECT device
                  FROM dm_device_attributes@smsdwde2.itg.ti.com
                  WHERE facility = 'DP1DM5'
                  AND status = 'A'
                  AND family LIKE 'PILOT%')
AND departure_dttm IS null AND latest = 'O'
AND opn = ANY( '9109', '9132', '9122','9131', '9124')

GROUP BY device
ORDER BY device) c,

(SELECT device, plan_bank, loop 
FROM pilot_goals) d


WHERE a.device = b.device
AND a.device = c.device
AND a.device = d.device(+))

ORDER BY  opn_wip desc

Старый вывод: enter image description here

Новый вывод: enter image description here

Вот все данные, которые должны быть заполнены на столе. enter image description here

1 Ответ

0 голосов
/ 31 января 2020

Существует два способа мышления.

Вы будете часто получать лучшую производительность, если добавите свой фильтр / где на самом низком уровне:

(SELECT device, fsi_opns, feed_opn_9109, feed_opn_9132, feed_opn_9122, feed_opn_9131, feed_opn_9124, starting_material, sort_opns, BOAT 
FROM pilot_feed_opn
where feed_opn_9132 = 'TOHO') a,

Однако, если у вас есть больше сложная логика c (совокупное число и т. д. c), часто более безопасно поместить ваш фильтр в самый внешний запрос.

РЕДАКТИРОВАТЬ: если вы ожидаете получить больше строк назад, основные вещи ограничивают ваши строки ваши внутренние соединения между ab и b- c. Попробуйте изменить их на внешние объединения, например:

WHERE a.device = b.device(+)
AND a.device = c.device(+)
AND a.device = d.device(+))
ORDER BY  opn_wip desc

В вашем случае не похоже, чтобы это имело большое значение, поскольку столбец feed_opn_9132 не является частью какого-либо агрегата. запросы. Я бы, наверное, go с первым вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...