TSQL:如何在select语句中添加char

时间:2009-01-27 16:45:18

标签: sql sql-server tsql sql-server-2000 row-number

我有以下声明

SELECT id, descr from mytable 

返回

1,'Test1'
4,'Test4'
6,'Test6'
8,'Test8'
22,'Test22'

现在我希望显示器为前4个结果添加顺序字符......

'A',1,'Test1'
'B',4,'Test4'
'C',6,'Test6'
'D',8,'Test8'
'',22,'Test22'

思想?

编辑:如果可能,更喜欢SQL Server 2000示例。

2 个答案:

答案 0 :(得分:4)

SELECT CASE WHEN ROWNUMBER < 4
           THEN CHAR(65 + ROWNUMBER - 1)
           ELSE ''
       AS <WHATEVER>
       ,X.id
       ,X.descr
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY <WHATEVER>) AS ROWNUMBER
        ,id
        ,descr
    FROM mytable
) AS X

这在SQL Server 2005及更高版本中。

在SQL Server 2000中(假设id是您的排序顺序且唯一):

SELECT CASE WHEN rownumbers.rownumber < 4
           THEN CHAR(65 + rownumbers.rownumber - 1)
           ELSE ''
       AS <WHATEVER>
       ,mytable.id
       ,mytable.descr
FROM (
    SELECT l.id, COUNT(*) AS rownumber
    FROM mytable AS l
    LEFT JOIN mytable AS r
        ON l.id >= r.id
    GROUP BY l.id
) AS rownumbers
INNER JOIN mytable
    ON mytable.id = rownumbers.id

答案 1 :(得分:0)

您无法在SQL Server 2000中的单个select语句中执行此操作.SQL Server 2000没有ROWNUM语句。

如果你想使用临时表,你可以使用IDENTITY函数。

SELECT IDENTITY(int,1,1) rownum, 
       id, 
       descr 
INTO #mytable 
from mytable

SELECT CASE WHEN ROWNUMBER < 4
       THEN CHAR(65 + ROWNUMBER - 1)
       ELSE ''
   AS <WHATEVER>
   ,X.id
   ,X.descr
FROM #mytable X
ORDER BY rownum

注意:IDENTITY函数只能在SELECT INTO语句中使用。