2017-09-06 39 views
0

我正在使用SQL Server 2014并希望在表中选择列号,并将行号连接到结果集中的列值。在SQL Server中选择具有行号的列

例如:

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

应该返回这个结果集:

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

我通过在使用ROW_NUMBER()几个类似的问题去了,但我发现它被选择作为一个单独的列而不是连接到正在返回的现有列。

当我尝试了ROW_NUMBER()串联的专栏中,我得到一个错误:

Error converting data type varchar to bigint.

请让我知道。

感谢

+0

你想ROW1, Row2,Row3作为一列中的行吗?或者是一个文本“Row1苹果” – Isaiah3015

+0

“Row1苹果”它只是一列 – Vishwas

+0

那么,告诉我们***你如何尝试连接这两个信息!由于'ROW_NUMBER()'返回一个'INT',所以你必须至少使用'CAST(ROW_NUMBER()AS VARCHAR(10))'或类似的东西,然后再与另一列的字符串值连接。 –

回答

1

出现这种情况的原因是因为你想添加一个数字字符串。你必须CAST你ROW_NUMBER为VARCHAR即

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

http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx –

0

您可以使用下面的 -

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

我不明白这是如何解决问题的吗?什么是ID字段? – Vishwas

+0

所以我不知道你的专栏名称是什么。这只是一个例子。 ID将是Row1,Row2,Row3等,因此将ID改为任何您命名的列,然后ColName将为Apple,Ball,Cat等。因此,将colName替换为列名称。然后显然用你的表名替换tb_Table。希望这是有道理的? – GrantD

2

这只是一些基本的串联ROW_NUMBER。似乎期望的输出很奇怪,但概念很简单。

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

如果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

如果你想GE t行号连接到任何列,检查其他答案。但海事组织,这真是奇怪。

如果你想在一个单独的列行号,

您可以使用ROW_NUMBER

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

您还可以使用CONCAT()以及使用CAST()的行数将其转换为字符

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