我有这样的表product
:
source_item_id source_rev_id
----------------------------
111 a_01_tz
111 b_01_tz
111 c_01_tz
222 e_02_tz
222 f_02_tz
222 g_01_tz
333 h_03_tz
444 g_04_tz
现在我想要这种格式的输出:
source_item_id source_rev_id target_rev_id
--------------------------------------------
111 a_01_tz AAA
111 b_01_tz AAB
111 c_01_tz AAC
222 e_02_tz AAA
222 f_02_tz AAB
222 g_01_tz AAC
333 h_03_tz AAA
444 g_04_tz AAA
444 l_04_tz AAB
对于一个source_item_id
,可以有多个source_rev_id
。
请在查询中提供帮助。感谢。
答案 0 :(得分:5)
组合子查询以创建项目计数器和表达式,以便从计数器创建AAA
到ZZZ
:
SELECT
source_item_id, source_rev_id ,
CHAR( (target_rev_num)/676 % 26 + 65)
+ CHAR( (target_rev_num)/26 % 26 + 65)
+ CHAR( target_rev_num % 26 + 65)
AS target_rev_id
FROM (
SELECT source_item_id, source_rev_id ,
ROW_NUMBER() OVER ( PARTITION BY source_item_id
ORDER BY source_rev_id ) -1
AS target_rev_num
FROM product
) P
答案 1 :(得分:2)
执行此操作的一种方法是使用id列创建所有target_rev_ids的永久查找表,例如
1 AAA
2 AAB
3 AAC
4 AAD
5 AAE
等
然后您可以使用ROW_NUMBER函数加入该表。
答案 2 :(得分:-1)
用SQL做的很难,但是cpp中有一个next_permutation函数用于获取字符串的下一个排列,所以它的类似于next_permutation的AAA就是你每次找到相同的item_id时应用它的AAB