У меня есть таблица SQL, подобная следующей:
item | subitem | stage | id |
-----------------------------------------------
i1 | s1 | picked | 1 |
i1 | s2 | shipped | 1 |
i2 | s4 | picked | 2 |
i3 | s10 | shipped | 2 |
i3 | s11 | eligible | 0 |
i4 | s2 |not eligible| 0 |
i1 | s1 | picked | 3 |
i1 | s2 | picked | 3 |
Я хочу, чтобы вывод был следующим:
item1|subitem1|item2|subitem2|pair_volume|item1pick|item1ship|item2pick|item2ship|
----------------------------------------------------------------------------------
i1 | s1 | i1 | s2 | 2 | 2 | 0 | 2 | 1 |
i1 | s1 | i2 | s4 | 1 |1 | 0 | 1 | 1 |
....
.....
....
По сути, я хочу сделать следующее:
Я хочу сначала сделать перекрестное соединение item, subitem
с самим собой, поэтому у меня есть все возможные комбинации item1
, subitem1
и item2
, subitem2
.
Вот как определяются этапы. Если стадия является приемлемой, то она является приемлемой, тогда как если стадия выбрана, то это означает, что элемент является приемлемым и выбранным. Если этап доставлен, это означает, что предмет имеет право, выбран и доставлен. Упоминается только последний этап.
Теперь для каждой пары item1, subitem1 - item2, subitem2
я хочу вычислить количество id
сеансов, где эта пара встречается и имеет этап в (eligible, shipped, picked)
, и заполнить значение в pair_volume
. Например, пара (i1,s1)-(i1,s2)
встречается дважды (один раз в id
1 и один раз в id
3), и в обеих этих id
сессиях оба элемента в паре были eligible
(что подразумевается из picked
и shipped
) этапы. Из 2 раз, когда эта подходящая пара встречалась, сколько раз было выбрано item1, item2 поднято, item1 отправлено и item2 отправлено? Это то, что я пытаюсь решить.
У меня все хорошо, пока кросс-соединение. Но я не знаю, как вставить значения в таблицу перекрестных соединений. Любая помощь очень ценится!
Вот что у меня есть:
select combination.item1, combination.subitem1, combination.item2,
combination.subitem2,
(
select tmp.item1, tmp.subitem1, tmp.item2, tmp.subitem2,
case when ((tmp.item1 = tmp.item2) and
(tmp.subitem1 = tmp.subitem2)) then 'TRUE' else
'FALSE' end as indicator from
(
select distinct item as item1, subitem as subitem2
from old
cross join
select distinct item as item2, subitem as subitem2
from old
) tmp
) combination
where combination.indicator = 'FALSE'
Запрос до перекрестного соединения работает нормально. Но я не знаю, как действовать дальше, чтобы вычислить дополнительные столбцы. Любая помощь высоко ценится, спасибо!