Перекрестное соединение и вставка значений в таблицу в SQL - PullRequest
0 голосов
/ 25 июня 2019

У меня есть таблица 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'

Запрос до перекрестного соединения работает нормально. Но я не знаю, как действовать дальше, чтобы вычислить дополнительные столбцы. Любая помощь высоко ценится, спасибо!

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