太少时填充行-Netezza SQL
我有一张包含客户、产品和等级的表格。该表处于客户产品级别,每个客户最多有5个产品。当产品少于5种时,我想从另一个表中填写数据,这样就有5种 原始表格:太少时填充行-Netezza SQL,sql,netezza,Sql,Netezza,我有一张包含客户、产品和等级的表格。该表处于客户产品级别,每个客户最多有5个产品。当产品少于5种时,我想从另一个表中填写数据,这样就有5种 原始表格: | Customer | Product | Rank | |----------|---------|------| | 123456 | 456 | 1 | | 123456 | 457 | 2 | | 123456 | 458 | 3 | | 234567 | 234 | 1
| Customer | Product | Rank |
|----------|---------|------|
| 123456 | 456 | 1 |
| 123456 | 457 | 2 |
| 123456 | 458 | 3 |
| 234567 | 234 | 1 |
| 234567 | 235 | 2 |
| 234567 | 236 | 3 |
| 234567 | 237 | 4 |
| 234567 | 238 | 5 |
| 345678 | 712 | 1 |
| 345678 | 713 | 2 |
填写表格:
| Product | Rank |
|---------|------|
| 123 | 1 |
| 124 | 2 |
| 125 | 3 |
| 126 | 4 |
| 127 | 5 |
我想要的结果是:
| Customer | Product | Rank |
|----------|---------|------|
| 123456 | 456 | 1 |
| 123456 | 457 | 2 |
| 123456 | 458 | 3 |
| 123456 | 123 | 4 |
| 123456 | 124 | 5 |
| 234567 | 234 | 1 |
| 234567 | 235 | 2 |
| 234567 | 236 | 3 |
| 234567 | 237 | 4 |
| 234567 | 238 | 5 |
| 345678 | 712 | 1 |
| 345678 | 713 | 2 |
| 345678 | 123 | 3 |
| 345678 | 124 | 4 |
| 345678 | 125 | 5 |
编辑:我应该提到我想先插入排名靠前的行。因此,对于客户123456,产品123应该排在第4位您可以使用
插入。选择
:
insert into original(customer, product, rank)
select c.customer, f.product, f.rank
from (select distinct customer from original) c cross join
fillin f left join
original o
on o.customer = c.customer and o.rank = f.rank
where o.rank is null;
您可以运行子查询以获取缺少的值
其思想是生成所有可能的“填充”组合。然后删除已经存在值的值
编辑:
哎呀,我还以为填写表中的排名就是最后的排名呢。但您仍然可以这样做:
insert into original(customer, product, rank)
select c.customer, f.product, f.rank
from (select customer, max(rank) as maxrank from original) c cross join
fillin f left join
original o
on o.customer = c.customer and o.rank - o.maxrank + 1 = f.rank;
太好了,谢谢!我应该提到我想先插入排名靠前的行。因此,对于客户123456,产品123应该排在第4位