SQL组按固定值列表

时间:2019-05-23 12:28:16

标签: sql oracle group-by fixed

如果我有两列:

$('pre').click(function() {
    $(this).toggleClass('hidden')
})

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

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

我可以以某种方式指定分组的“级别”吗?

我正在使用SQL Oracle。

我想要的结果是:

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

及其各自的数量,如果不存在则为0,否则为null。 (我有一个过滤器来排除col1和col2相同的地方)

1 个答案:

答案 0 :(得分:1)

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