Извините, если название немного вводит в заблуждение, но я не знаю, как еще его выразить. В любом случае вернемся к проблеме под рукой. У меня есть 2 таблицы WSM (содержит идентификатор хранилища, имя и связанный с ним риск) и SUTSM_REP (отношение хранилища и склада). Ниже приведены значения, которые они содержат: таблица WSM
SUTSM_REP
Каждый склад имеет связанный с ним риск (4 категории риска - низкий, средний , High & Critical) и магазин получает вещи с нескольких складов. Если магазин получает товары с 3 складов (например, w1 (средний риск), w2 (высокий), w3 (низкий)), тогда риск, связанный с магазином, «Высокий». Точно так же, если магазин получает товары с 2 складов - 1 со средним и другой с низким риском, тогда магазин получает «средний» риск. Я надеюсь, что я ясно с этим пунктом. Меня попросили подсчитать количество магазинов с каждым риском. Поэтому я создал еще одну таблицу с идентификатором риска и риска. Я назначил 1 для низкого, 2 для среднего, 3 для высокого и 4 для критического. Затем я присоединился к 3 таблицам вместе с максимальным идентификатором риска, а затем сделал подсчет этого. Ниже мой запрос:
select RID, count(sp_id)
from
(select a.sp_id, max(c.r_id) AS RID
from SUTSM_REP a,
WSM b,
wsm_rid c
where a.sm_id = b.sm_id and b.smr = c.smr
group by a.sp_id) t
group by RID;
И результат: Результат моего запроса
Но босс не хочет, чтобы была создана третья таблица, и ему нужен риск имена (низкий, средний, высокий, критический) вместо идентификаторов риска. Поэтому я изменил запрос так:
with t as (
select sm_id, sm_name, smr, DECODE(smr, 'Low', 1,
'Medium', 2,
'High', 3,
'Critical', 4,
0) RISK_ID
from wsm )
select rid, count(sp_id) from
( select sp_id, max(risk_id) rid
from (select a.sp_id, b.sm_id, b.risk_id
from SUTSM_REP a, t b
where a.sm_id=b.sm_id)
group by sp_id )
group by rid;
Я создал временную таблицу с помощью wsm и добавил идентификатор риска в категорию / уровень риска. А потом использовал тот же лог c, что и раньше. Вывод этого запроса :
Мы используем Oracle SQL. Может кто-нибудь помочь мне или указать мне, как получить названия категорий / уровней риска? Я в своем уме остроумие здесь. Заранее благодарен всем постерам за помощь.