我有这样的表:
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
... 等等
基本上,我必须为每个ID合并第2和第3列和组。
我做的是CAST,我得到了“合并”第2和第3列,现在我需要按id分组id,对于未知数量的id(不能手动执行id)。
因此,我使用2行
创建了新的3列表,而不是原始的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
只需要以某种方式对它进行分组,以获得我需要的输出。我确定它可以用光标完成,但我可以做到。
提前感谢您的帮助。
答案 0 :(得分:2)
如果您使用的是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
答案 1 :(得分:-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