SQL问题:有Tabel T(c1 int, c2 nvarchar(50), c3 int)
c1    c2    c3
1    How    1
2    are    1
3    you    1
4    Fine    2
5    thanks    2
6    And    2
7    you    2
8    I    3
9    am    3
10    fine    3
11    too    3

想得到如下结果:
How are you
Fine thanks And you
I am fine too

以上问题如果用游标,临时表等等来实现,那是相当简单,但是游标和临时表都太占用资源,浪费性能,其实可以用简单的SQL语句来实现,完整的例子如下(SQL Server 2005实现):

 1小SQL大功能IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[T]'AND type in (N'U'))
 2小SQL大功能DROP TABLE [dbo].[T]
 3小SQL大功能GO 
 4小SQL大功能
 5小SQL大功能create table T(
 6小SQL大功能    c1 int not null,
 7小SQL大功能    c2 nvarchar(50not null,
 8小SQL大功能    c3 int not null
 9小SQL大功能)
10小SQL大功能GO 
11小SQL大功能
12小SQL大功能insert into T(c1, c2, c3)
13小SQL大功能select 1'How'1 union
14小SQL大功能select 2'are'1 union
15小SQL大功能select 3'you'1 union
16小SQL大功能select 4'Fine'2 union
17小SQL大功能select 5'thanks'2 union
18小SQL大功能select 6'And'2 union
19小SQL大功能select 7'you'2 union
20小SQL大功能select 8'I'3 union
21小SQL大功能select 9'am'3 union
22小SQL大功能select 10'fine'3 union
23小SQL大功能select 11'too'3
24小SQL大功能GO 
25小SQL大功能
26小SQL大功能declare @s nvarchar(300), @idx int
27小SQL大功能set @s=''
28小SQL大功能set @idx=0    -- 可以为任何值 
29小SQL大功能
30小SQL大功能select @s=@s
31小SQL大功能    + case @idx when c3 then ' ' else char(10end 
32小SQL大功能    + c2,
33小SQL大功能    @idx = c3
34小SQL大功能from T 
35小SQL大功能
36小SQL大功能set @s=stuff(@s11'')    -- 去@s首字符,为' '或为char(10)
37小SQL大功能print @s    -- 打印查看结果

相关文章:

  • 2021-10-09
  • 2021-11-16
  • 2021-11-17
  • 2021-11-27
  • 2022-02-08
  • 2022-12-23
  • 2022-02-27
  • 2022-03-09
猜你喜欢
  • 2022-12-23
  • 2021-05-26
  • 2021-04-16
  • 2021-12-29
  • 2022-02-01
  • 2022-12-23
相关资源
相似解决方案