我有以下声明
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示例。
答案 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语句中使用。