SQL Server - 第n行后重复字符

时间:2015-01-24 08:48:13

标签: sql sql-server character repeat

如何在每第n行后重复字符。例如,我想要这样的结果:

1 1234-A 
2 32423-B 
3 324234-C 
4 afsd-D 
5 32432-A 
6 32423-B 
7 3dsfa33-C
8 sdfw3rf-D

这个A,B,C和D将在结果集中重复出现。没有其他角色。

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT YourID
      ,YourDescr + '-' + CHAR((ROW_NUMBER() OVER (ORDER BY YourID) - 1) % 4 + 65) AS YourDescr
FROM YourTable

它不依赖于ID列的值。

答案 1 :(得分:0)

为每四行生成一个行号,并使用case语句追加所需的字符。试试这个。

CREATE TABLE #str(id INT,string VARCHAR(50))

INSERT #str
VALUES (1,'1234' ),(2,'32423' ),(3,'324234' ),
       (4,'afsd' ),(5,'32432' ),(6,'32423' ),
       (7,'3dsfa33' ),(8,'sdfw3rf' )

SELECT id,
       CASE
         WHEN rn = 1 THEN string + '-A'
         WHEN rn = 2 THEN string + '-B'
         WHEN rn = 3 THEN string + '-C'
         WHEN rn = 4 THEN string + '-D'
       END AS String
FROM   (SELECT ( ( id - 1 )%4 ) + 1 rn,*
        FROM   #str)a 

结果:

+----+-----------+
| id |  String   |
+----+-----------+
| 1  |  1234-A   |
| 2  |  32423-B  |
| 3  |  324234-C |
| 4  |  afsd-D   |
| 5  |  32432-A  |
| 6  |  32423-B  |
| 7  |  3dsfa33-C|
| 8  |  sdfw3rf-D|
+----+-----------+