【发布时间】:2021-01-20 20:23:29
【问题描述】:
我给你写信是因为我找不到任何解决我问题的方法,我什至不知道是否有办法解决。我正在使用 SQL (MonetDB)。
我有一张这样的桌子:
| username | Field1 | Field2 |
|---|---|---|
| AAA | NULL | 1 |
| AAA | type1 | 12 |
| AAA | type2 | 21 |
| AAA | type3 | 1 |
| BBB | null | 6 |
| BBB | type1 | 2 |
| BBB | type4 | 3 |
| CCC | type1 | 23 |
| CCC | type3 | 352 |
| CCC | type4 | 12 |
这个表已经按用户名排序(首先是空值),然后是 field1,我在这两个列上没有任何重复。
我需要更新另一列。 当上面的行具有相同的用户名并且 field1 不为空时,那么 new field3 应该是 CONCAT(Field1, Field2) 然后对于下一行,如果用户名相同,但 Field1 又不是 null 并且与上一个不同,则 Field3 应该是 CONCAT(previous Field3, Field1, Field2)。
我正在尝试逐行调整执行此操作的处理,并保留保存的最后一个值,这就是为什么我在关系数据库中努力做到这一点。
我的最终结果应该是:
| username | Field1 | Field2 | Field 3 |
|---|---|---|---|
| AAA | NULL | 1 | |
| AAA | type1 | 12 | type1 : 12 |
| AAA | type2 | 21 | type1 : 12 type 2 : 21 |
| AAA | type3 | 1 | type1 : 12 type 2 : 21 type3: 1 |
| BBB | null | 6 | |
| BBB | type1 | 2 | type1:2 |
| BBB | type4 | 3 | type1:2 type4:3 |
| CCC | type1 | 23 | type1 : 23 |
| CCC | type3 | 352 | type1 : 23 type 3:352 |
| CCC | type4 | 12 | type1 : 23 type 3:352 type 4:12 |
之后的最终目标是选择用户名和用户名最长的字段3。 希望我已经清楚我需要做什么,如果您需要更多解释,请告诉我。感谢您的帮助!
【问题讨论】:
标签: sql concatenation row monetdb