选择在SQL Server中连接行号的列

时间:2017-09-06 16:04:39

标签: sql sql-server tsql

我正在使用SQL Server 2014,并希望在表中选择一个列,其行号与结果集中的列值连接。

例如:

DemoField
---------
Apple
Ball
Cat

应返回此结果集:

DemoField
---------
Row1 Apple
Row2 Ball
Row3 Cat

我在使用ROW_NUMBER()时遇到了一些类似的问题,但我发现它被选为一个单独的列,而不是连接到要返回的现有列。

当我尝试将ROW_NUMBER()连接到列时,出现错误:

  

将数据类型varchar转换为bigint时出错。

请告诉我。

由于

6 个答案:

答案 0 :(得分:3)

如果2012+你可以使用 concat()

示例

Declare @YourTable Table ([DemoField] varchar(50))
Insert Into @YourTable Values 
 ('Apple')
,('Ball')
,('Cat')

Select concat('Row',Row_Number() over(Order By DemoField),' ',DemoField)
 from @YourTable

<强>返回

(No column name)
Row1 Apple
Row2 Ball
Row3 Cat

答案 1 :(得分:2)

这只是基本的ROW_NUMBER,有一些连接。似乎所需的输出很奇怪,但概念很简单。

select DemoField
from
(
    select DemoField = 'Row' + convert(varchar(4), ROW_NUMBER() over (order by DemoField)) + ' ' + DemoField
    from YourTable
) x

答案 2 :(得分:1)

发生这种情况的原因是因为您正在尝试向字符串添加数字。您必须将{rownumber CAST作为VARCHAR,即

'Row' + CAST(ROW_NUMBER() OVER (ORDER BY DemoField) AS VARCHAR)

答案 3 :(得分:0)

您可以使用以下内容 -

SELECT CAST(ID AS NVARCHAR)+' '+CAST(ColName AS NVARCHAR) 
  FROM tb_Table

答案 4 :(得分:0)

如果要将行号连接到任何列,请检查其他答案。但IMO,这真的很奇怪。

如果您想在单独的列中获取行号,

您可以使用ROW_NUMBER

SELECT *, ROW_NUMBER() OVER(ORDER BY some_column) as RowNumber FROM YourTable

答案 5 :(得分:0)

您还可以使用CONCAT()以及USE CAST()将行号转换为字符

SELECT CONCAT('Row',CAST(ROW_NUMBER() OVER (ORDER BY demofield) AS VARCHAR),' ', demofield)