需要SQL Server中的查询逻辑

时间:2018-05-15 19:27:44

标签: sql sql-server

我有这样的表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

请在查询中提供帮助。感谢。

3 个答案:

答案 0 :(得分:5)

组合子查询以创建项目计数器和表达式,以便从计数器创建AAAZZZ

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