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 ответа:
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.