2

我有以下声明

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 示例。

4

2 回答 2

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
于 2009-01-27T16:48:53.453 回答
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 语句中使用。

于 2009-01-27T17:15:05.740 回答