SQL 按固定值列表分组

SQL Group by fixed list of values

如果我有两列:

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

然后我按 col1、col2 执行分组,然后我为数据中的每个组合(存在)获得一行。

虽然我的问题是,我并不总是拥有所有组合,但我仍想 return 每个组合的一行。所以如果没有组合。例如 2 -> 1 那么我希望它的值为 0.

我能以某种方式指定组的 "levels" 吗?

我正在使用 SQL Oracle。

我想要的结果是:

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

用它们各自的数量,如果它们不存在则为0,或者为空。 (我有一个过滤器可以排除 col1 和 col2 相同的地方)

使用 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;