列值的红移产品

问题描述:

如何在红移中生成多列的所有可能组合?列值的红移产品

例如,对于名称和组的所有组合,

| name | group | value | 
+-------+-------+-------| 
| a  | 1  | 1  | 
| a  | 2  | 1  | 
| a  | 3  | 1  | 
| b  | 1  | 1  | 
| b  | 2  | 1  | 
| c  | 3  | 1  | 

我想获取以下信息:

| name | group | value | 
+-------+-------+-------| 
| a  | 1  | 1  | 
| a  | 2  | 1  | 
| a  | 3  | 1  | 
| b  | 1  | 1  | 
| b  | 2  | 1  | 
| b  | 3  | Null | 
| c  | 1  | Null | 
| c  | 2  | Null | 
| c  | 3  | 1  | 

你可以做到这一点使用cross joinleft join

select n.name, g.group, t.value 
from (select distinct name from t) n cross join 
    (select distinct group from t) g left join 
    t 
    on t.name = n.name and t.group = g.group 
order by 1, 2; 

如果y不必使用子查询来获取不同的值你可以把它们放在另一张桌子上。