TSQL: как добавить символ в инструкцию select


У меня есть следующее утверждение

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'

Мысли?

Edit: предпочел бы пример SQL Server 2000, если это возможно.

2 2

2 ответа:

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

Вы не можете сделать это в одной инструкции select в SQL Server 2000. 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

Примечание: функция идентификации может использоваться только в операторе SELECT INTO.