2017-09-06 45 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)