列值的红移产品
问题描述:
如何在红移中生成多列的所有可能组合?列值的红移产品
例如,对于名称和组的所有组合,
| 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 join
和left 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不必使用子查询来获取不同的值你可以把它们放在另一张桌子上。