У меня есть две таблицы WIP и ROS, в обеих таблицах есть много столбцов, но основными столбцами являются: Branch, Date, LC и, 'DN' и 'JCN' используются для объединения двух таблиц, и выходные данные должны быть в формате нижеВетвь, Дата, количество (* в зависимости от условия) / количество (*)
Как уже упоминалось, обе таблицы имеют много столбцов, но для моего запроса: WIP содержит столбцы Branch, Status, Date и DN, а ROS содержит Branch,Столбцы LC и JCN
Я использовал оператор case, как показано ниже:
select a.Branch,[Billed Date],avg(case when LC in
('A22D','SB15','SB16','AT01','AT02','AT03') then 1.0 else 0 end)
from WIP a join ROS b on a.DN = b.JCN
where a.[Status] = 'BILLED' and SUBSTRING(a.DN,1,3) = 'XJC'
group by a.Branch,[Billed Date]
order by 1,2
Я пытаюсь получить результаты, используя соединения и коррелированный подзапрос, без использования оператора case
Я использовал приведенный ниже запрос, но получил неправильный результат.
select a.Branch,[Billed Date],
1.0*(select count(*) from ROS where LC in ('A22D','SB15','SB16','AT01','AT02','AT03') and c.Branch =
a.Branch )/(select count(*) from ROS d where d.Branch = a.Branch)
from WIP a join ROS b on a.DN = b.JCN
where a.[Status] = 'BILLED' and SUBSTRING(a.DN,1,3) = 'XJC'
order by 1,2
Я ожидаю, что результат будет:
Branch Date Average_Jobs
A 2019-06-01 0.11
B 2019-06-01 0.09
C 2019-06-01 0.12
A 2019-06-02 0.12
B 2019-06-02 0.10
C 2019-06-02 0.13
Где средний столбец получен из числа LC, которыеA22D, SB15, SB16, AT01, AT02, AT03 и т. Д. Разделили общее количество LC для каждой ветви и каждого дня.
Я получаю ниже вывод с коррелированным подзапросом, я знаю, что все средние числа неверны:
Branch Date Avg
A 2019-06-01 0.032258065
A 2019-06-02 0.032258065
A 2019-06-03 0.032258065
A 2019-06-04 0.032258065
A 2019-06-05 0.032258065
A 2019-06-06 0.032258065
B 2019-06-01 0.032183908
B 2019-06-02 0.032183908
B 2019-06-03 0.032183908
B 2019-06-04 0.032183908
B 2019-06-05 0.032183908
B 2019-06-06 0.032183908
C 2019-06-01 0.032183908
C 2019-06-02 0.032183908
C 2019-06-03 0.032183908
C 2019-06-04 0.032183908
C 2019-06-05 0.032183908
C 2019-06-06 0.032183908
***** РЕДАКТИРОВАТЬ: мне нужно изменить запрос, поскольку он не дал мне правильных результатов при ручной проверке.Проблема состоит в том, что DN является первичным ключом, а JCN - внешним ключом, который содержит много дубликатов в столбце LC для EX:
WIP Table ROS Table
DN JCN LC
11A 11A A21X
12A 11A SB15
. 11A AT09
. 11A A22A
. 12A A22A
. 12A AT11
12A SB01
Выходные данные моего запроса дают среднее значение 14,28%, поскольку из 7 строк,условие выполняется с помощью SB15 во втором ряду.В то время как то, что мне нужно в среднем, должно быть 50%.Это потому, что в столбце DN есть две записи: 11A и 12A, и только у одной из них есть LC, который нас интересует, т. Е. «SB15».Поэтому среднее значение составляет 1/2 = 0,5 от 50%.Я знаю, что мне нужно принимать значения DISTINCT для JCN или DN, чтобы получить правильный результат, я использовал DISTINCT, как показано ниже, но не получил правильный результат:
select a.Branch,[Billed Date],avg(case when LC in
('A22D','SB15','SB16','AT01','AT02','AT03') then 1.0 else 0 end)
from WIP a join (select distinct JCN,LC from ROS) b on a.DN = b.JCN
where a.[Status] = 'BILLED' and SUBSTRING(a.DN,1,3) = 'XJC'
group by a.Branch,[Billed Date]
order by 1,2
Может кто-нибудь, пожалуйста, дайте мне знать, как это получить?