SQL Group по фиксированному списку значений - PullRequest
0 голосов
/ 23 мая 2019

Если у меня есть два столбца:

col1    col2     amount
1       2         15
2       3         12
1       3         10
3       1         4
3       2         3

И я выполняю группу по col1, col2, тогда я получаю строку для каждой комбинации (присутствующей) в данных.

Моя проблема, однако, в том, что у меня не всегда есть все комбинации, но я бы хотел вернуть строку каждой комбинации по-прежнему.Так что, если нет комбинации.например 2 -> 1, тогда я бы хотел, чтобы его значение было равно 0.

Могу ли я как-то указать "уровни" группы с помощью?

Я использую SQL Oracle.

и результат, который я хотел бы получить:

1 -> 2   15
1 -> 3   10
2 -> 1   0
2 -> 3   12
3 -> 1   4
3 -> 2   3

с их соответствующей суммой и 0, если они не существуют, или ноль работает.(У меня есть фильтр, чтобы исключить, когда col1 и col2 совпадают)

1 Ответ

1 голос
/ 23 мая 2019

Создайте все строки, используя cross join, а затем отфильтруйте те, которые вам нужны:

select c1.col1, c2.col2, coalesce(t.amount, 0)
from (select 1 as co1l from dual union all
      select 2 as co1l from dual union all
      select 3 as co1l from dual
     ) c1 cross join
     (select 1 as co12 from dual union all
      select 2 as co12 from dual union all
      select 3 as co12 from dual
     ) c2 left join
     t
     on t.col1 = c1.col1 and t.col2 = c2.col2
where c1.col1 <> c2.col2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...