2011-10-24 6 views
0

je table comme ceci:curseur dans la procédure stockée

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

Il faut être

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

... et ainsi de suite

Fondamentalement, je dois fusionner 2e et 3ème colonne et groupe pour chaque ID. Ce que j'ai fait est CAST, et j'ai "fusionné" les 2ème et 3ème colonnes, et maintenant je dois grouper ID par ID, pour le nombre inconnu d'IDs (ne peut pas faire id manuellement).

Ainsi, au lieu du tableau 3 colonnes d'origine, j'ai fait nouveau avec 2 rangées

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

Juste besoin d'une certaine façon de les regrouper, pour obtenir la sortie dont j'ai besoin. Je suis sûr que cela peut être fait avec le (s) curseur (s), mais je peux y arriver.

Merci d'avance pour votre aide.

+2

MS SQL ou MySQL?! – abatishchev

+1

duplication possible de [Comment Comma séparer plusieurs lignes obtenues à partir d'une requête SQL] (http://stackoverflow.com/questions/5536754/how-to-comma-separate-multiple-rows-obtained-from-a-sql- requête) –

+0

@abatishchev C'est MS SQL. –

Répondre

2

Si vous utilisez SQL Server 2008, ce qui suit fonctionne sans l'aide d'un curseur:

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 
-1
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 
+2

Bienvenue dans StackOverflow: si vous postez du code, du XML ou des échantillons de données, ** mettez en surbrillance ces lignes dans l'éditeur de texte et cliquez sur le bouton "échantillons de code" dans la barre d'outils de l'éditeur. la syntaxe le met en évidence! –

+0

Qu'est-ce que Numbervalue? Et si je n'étais pas assez clair, c'est MS SQL. Merci. –

+0

JUst il peut être fait dans le curseur et l'OP a demandé un curseur, ne signifie pas qu'il est le meilleur choix pour un renvoi. Cette tâche ne nécessite pas de curseur et ne doit pas être utilisée. – HLGEM

Questions connexes