同一列值不同行到不同列值不同行

时间:2019-10-10 09:43:51

标签: sql sql-server

假设我下面有一张下表

Column a                         Column b
------------------------------------------
aaaa                              13     
aaaa                              22     
aaaa                               3     
aaaa                              23    
bbbb                              44    
bbbb                              56    
bbbb                               9     
bbbb                               0   

我想从一个表中获取数据,然后将其放入另一个表中,但是我想使列具有唯一性,因为它不是唯一的

我正在尝试提出SQL语句

DECLARE @Count INT 
SET @count = 4

case when @count <= 4 then
while @Count = @Count - 1 and @Count <> 0
select @Count + columnA, columnBform tablename

执行查询后,我希望数据显示如下

Column a                         Column b
------------------------------------------
1aaaa                              13     
2aaaa                              22     
3aaaa                               3     
4aaaa                              23    
1bbbb                              44    
2bbbb                              56    
3bbbb                               9     
4bbbb                               0

2 个答案:

答案 0 :(得分:0)

您可以使用ROW_NUMBER()

SELECT
    CAST(ROW_NUMBER() OVER(PARTITION BY column_a ORDER BY column_b) AS VARCHAR(5))
        + column_a,
    column_b
FROM mytable

这将通过递增column_a在共享sahme column_b的每组记录中分配递增的数字。如果更适合您,则可以使用另一列对记录进行排序。

答案 1 :(得分:0)

您可以使用窗口函数ROW_NUMBER作为

SELECT CONCAT(ROW_NUMBER() OVER(PARTITION BY Col1 ORDER BY Col1), Col1) Col1,
       Col2
FROM
(
  VALUES
  ('aaaa',                              13),     
  ('aaaa',                              22),     
  ('aaaa',                              3 ),    
  ('aaaa',                              23),    
  ('bbbb',                              44),    
  ('bbbb',                              56),    
  ('bbbb',                              9 ),    
  ('bbbb',                              0 )
) T(Col1, Col2)

Online Demo