Создание серии алфавита в SQL Server - PullRequest
3 голосов
/ 08 июля 2010

Я пытаюсь создать серию алфавитов, используя SQL Server.

Предположим, у меня есть следующие таблицы

DECLARE @Funding TABLE (FundingDetailID INT,FundingID INT, DetailDescription VARCHAR(50))
INSERT INTO @Funding (FundingDetailID ,FundingID , DetailDescription) VALUES (1,107,'Desc 1')
INSERT INTO @Funding (FundingDetailID ,FundingID , DetailDescription) VALUES (1,107,'Desc 2')
INSERT INTO @Funding (FundingDetailID ,FundingID , DetailDescription) VALUES (1,107,'Desc 3')

Я пытаюсь получить следующий результат.

a) Desc 1
b) Desc 2
c) Desc 3

Как мне сгенерировать “a)”, “b)”,…?Мне не разрешено добавлять какие-либо дополнительные временные таблицы или переменные таблиц для первоначального хранения алфавитов.Они должны быть сгенерированы.

И это должно быть сделано в SQL Server 2005.

Есть мысли?

Спасибо

Lijo Cheeran Joseph

Ответы [ 2 ]

6 голосов
/ 08 июля 2010

Используйте ROW_NUMBER () следующим образом

DECLARE @Funding TABLE (FundingDetailID INT,FundingID INT, DetailDescription VARCHAR(50))
INSERT INTO @Funding VALUES (1,107,'Desc 1')
INSERT INTO @Funding VALUES (1,107,'Desc 2')
INSERT INTO @Funding VALUES (1,107,'Desc 3')

SELECT CHAR (CAST (96+ROW_NUMBER() OVER (Order BY FundingDetailID) AS VARCHAR)) + ') ' + DetailDescription
FROM @Funding



-----------------------------------------------------
a) Desc 1
b) Desc 2
c) Desc 3
0 голосов
/ 08 июля 2010

Raj More уже опубликовал row_number(), пока я его писал. Я проголосовал за его ответ, но вот мой вариант, который делает обновление на столе, на тот случай, если вы заинтересованы в этом.

update  f1
set     f1.DetailDescription = char(96 + f2.rn) + ') ' + f2.DetailDescription
from    @Funding f1
join    (
        select  row_number() over (order by FundingDetailId, 
                                      FundingId, DetailDescription) as rn
        ,       *
        from    @Funding f
        ) f2
on      f1.FundingDetailID = f2.FundingDetailID
        and f1.FundingID = f2.FundingID
        and f1.DetailDescription = f2.DetailDescription

select  *
from    @Funding
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...