我有一个下表
| 列A|色谱柱B|
| --|--|
| 1000 | 8800 |
| 1000 | 8810 |
| 1000 | 8820 |
| 2000 | 9900 |
| 2000 | 9910 |
我需要创建一个列为C的下表。列C包含来自列B的值,列A具有该值的公共值。例如:对于1000,有3个值8800,8810,8820。因此,对于1000和B列值的每个组合,我需要C列中的剩余值。如何使用SQL生成下表?
| 列A|色谱柱B|列C|
| --|--|--|
| 1000 | 8800 | 8810 |
| 1000 | 8800 | 8820 |
| 1000 | 8810 | 8800 |
| 1000 | 8810 | 8820 |
| 1000 | 8820 | 8800 |
| 1000 | 8820 | 8810 |
| 2000 | 9900 | 9910 |
| 2000 | 9910 | 9900 |
| | | |
| | | |
我尝试使用Concat,但无法生成列c
3条答案
按热度按时间kx1ctssn1#
一个选项是执行自联接。
示例数据:
查询方式:
zpqajqem2#
您可以使用分层查询来消除对任何联接的需要:
其中,对于样本数据:
输出:
| 可乐|COLB| COLC|
| --|--|--|
| 1000 | 8800 | 8810 |
| 1000 | 8800 | 8820 |
| 1000 | 8810 | 8800 |
| 1000 | 8810 | 8820 |
| 1000 | 8820 | 8800 |
| 1000 | 8820 | 8810 |
| 2000 | 9900 | 9910 |
| 2000 | 9910 | 9900 |
fiddle
zzwlnbp83#
您可以将所有值聚合到每个组的集合中(
column_a
值),然后执行此集合与其自身的交叉联接以生成所有对。它为您的数据生成以下输出:
| 列_A|列_B| C列|
| --|--|--|
| 1000 | 8800 | 8820 |
| 1000 | 8800 | 8810 |
| 1000 | 8820 | 8800 |
| 1000 | 8820 | 8810 |
| 1000 | 8810 | 8800 |
| 1000 | 8810 | 8820 |
| 2000 | 9900 | 9910 |
| 2000 | 9910 | 9900 |
fiddle