Курсор в хранимой процедуре - PullRequest
0 голосов
/ 24 октября 2011

У меня есть такая таблица:

id number value
1    300   233
2    343   434
2    565   655
3    562   343
1    434   232
3    232   444
3    458   232

Это должно быть

id number:value, number:value...
1   300:233, 434:232
2   343:434, 565:655

... и так далее

По сути, мне нужно объединить 2-й и 3-й столбец и группу для каждого идентификатора.

То, что я сделал, это CAST, и я получил «объединенные» 2-й и 3-й столбцы, и теперь мне нужно сгруппировать идентификатор по идентификатору для неизвестного количества идентификаторов (невозможно сделать идентификатор вручную).

Итак, вместо исходной таблицы с тремя столбцами я создал новую с двумя строками

id number:value
1    300:233
2    343:434
2    565:655
3    562:343
1    434:232
3    232:444
3    458:232

Просто нужно как-то сгруппировать его, чтобы получить нужный мне вывод. Я уверен, что это может быть сделано с помощью курсора (ов), но я могу добраться до этого.

Заранее спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

Если вы используете SQL 2008, без курсора будет работать следующее:

DECLARE @t TABLE
    (
      id INT
    , number INT
    , VALUE INT
    )

INSERT  INTO @t
        ( id, number, VALUE )
VALUES  ( 1, 300, 233 ),
        ( 2, 343, 434 ),
        ( 2, 565, 655 ),
        ( 3, 562, 343 ),
        ( 1, 434, 232 ),
        ( 3, 232, 444 ),
        ( 3, 458, 232 )


SELECT  DISTINCT ID
      , STUFF(( SELECT  ',' + CONVERT(VARCHAR(10), number) + ':'
                        + CONVERT(VARCHAR(10), VALUE)
                FROM    @t i
                WHERE   t.ID = i.ID
              FOR
                XML PATH('')
              ), 1, 1, '') AS [number:value]
FROM    @t t
0 голосов
/ 24 октября 2011
GO
-- Declare the variables to store the values returned by FETCH.
DECLARE @Number varchar(50);
DECLARE @Value varchar(50);

DECLARE number_cursor CURSOR FOR
select  Number, Value FROM [table_name] for update of Numbervalue

OPEN number_cursor;

FETCH NEXT FROM number_cursor
INTO @Number, @Value;

WHILE @@FETCH_STATUS = 0
BEGIN   
    UPDATE [table_name]
    SET Numbervalue ='@Number'+'@Value' where current of number_cursor    
   FETCH NEXT FROM number_cursor
   INTO @Namber,@Value;
END

CLOSE number_cursor;
DEALLOCATE number_cursor;
GO
...