TSQL: как добавить символ в оператор выбора - PullRequest
2 голосов
/ 27 января 2009

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

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 ]

4 голосов
/ 27 января 2009
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
0 голосов
/ 27 января 2009

Вы не можете сделать это с помощью одного оператора 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

ПРИМЕЧАНИЕ. Функция IDENTITY может использоваться только в операторе SELECT INTO.

...