拼串sql怎样写

情景一: 表中数据 name score aaa 11 aaa 19 bbb 12 bbb 18 ccc 19 ddd
21 期望查询结果如下 name score aaa 30 bbb 30 ccc 19 ddd 21 复制代码 代码如下: —检查表是否存在 if
exists(select * from sysobjects where name=’testSum’) drop table
testSum go —创建表 create table testSum ( tid int primary key
identity(1,1), tname varchar(30) null, tscor int null ) go insert into
testSum (tname,tscor) select ‘aaa’,11 union all select ‘aaa’,19 union
all select ‘bbb’,12 union all select ‘bbb’,18 union all select ‘ccc’,19
union all select ‘ddd’,21 —查询语句 select tname ,sum(tscor) from
testSum group by tname —只查询tscor总和为30的 select tname ,sum(tscor)
from testSum group by tname having sum(tscor)=30 情景二: 姓名 科目
分数 张三 语文 30 张三 数学 50 张三 英语 70 李四 语文 50 李四 数学 80
李四 英语 90 期望查询结果: 姓名 语文 数学 英语 张三 30 50 70 李四 50 80
90 复制代码 代码如下: —检查表是否存在
if exists(select * from sysobjects where name=’testScore’) drop table
testScore go —创建表 create table testScore ( tid int primary key
identity(1,1), tname varchar(30) null, ttype varchar(10) null, tscor int
null ) go —插入数据 insert into testScore values (‘张三’,’语文’,90)
insert into testScore values (‘张三’,’数学’,20) insert into testScore
values (‘张三’,’英语’,50) insert into testScore values
(‘李四’,’语文’,30) insert into testScore values (‘李四’,’数学’,47)
insert into testScore values (‘李四’,’英语’,78) —查询 select tname as
‘姓名’ , max(case ttype when ‘语文’ then tscor else 0 end) ‘语文’,
max(case ttype when ‘数学’ then tscor else 0 end) ‘数学’, max(case ttype
when ‘英语’ then tscor else 0 end) ‘英语’ from testScore group by tname
情景三: 表:table1 字段:id , name 内容: —————- 1,aaa
1,bbb 2,ccc 2,ddd 3,eee 3,fff ————– 希望结果:
——————— 1 aaa bbb [aaa bbb之间半角空格区分,以下类似] 2
ccc ddd 3 eee fff 复制代码 代码如下: f
exists(select * from sysobjects where name=’test1′) drop table test1 go
create table test1 ( tid int primary key identity(1,1), tnum int null,
tname varchar(30) null ) go insert into test1 values (1,’aa’) insert
into test1 values (1,’bb’) insert into test1 values (2,’cc’) insert into
test1 values (2,’dd’) insert into test1 values (3,’ee’) insert into
test1 values (3,’ff’) SELECT * FROM ( SELECT DISTINCT tnum FROM test1
)A OUTER APPLY( SELECT tname= STUFF(REPLACE(REPLACE( ( SELECT tname FROM
test1 N WHERE tnum = A.tnum FOR XML AUTO ), ‘N tname=”‘, ‘ ‘), ‘”/’,
”), 1, 1, ”) )N 情景四:
我需要将表tb中的数据select出来,得到下面第二个表的数据,如何写select语句?
表tb id a flag class ———-+———+——–+——— 1 2 1 A 2 2
1 A 3 4 1 A 4 5 2 A 5 3 2 A 6 4 1 A 7 2 1 A 8 3 2 A 9 4 2 A 10 5 3 A 11
5 1 B 12 2 1 B 13 3 1 B 14 4 1 B 15 2 3 B 16 7 3 B 17 3 2 B 18 4 1 B 19
5 1 B 20 2 2 B 21 1 1 B 22 1 1 C 23 2 3 C 24 6 3 C 25 3 2 C …
需要选取出如下的表,按class列进行分组,a1,a2,a3字段分别为flag=1、2、3时tb表中a字段的求和
选取后 a1 a2 a3 class
———–+————+—————–+————– sum(a) sum(a)
sum(a) A sum(a) sum(a) sum(a) B sum(a) sum(a) sum(a) C sum(a) sum(a)
sum(a) D sum(a) sum(a) sum(a) E sum(a) sum(a) sum(a) F sum(a) sum(a)
sum(a) G 复制代码 代码如下:
—检查表是否存在 if exists(select * from sysobjects where
name=’testFlag’) drop table testFlag go —创建表 create table testFlag
( tid int primary key identity(1,1), tname varchar(30) null, tflag int
null, tscor int null ) go —插入数据 insert into testFlag
(tname,tflag,tscor) select ‘aaa’,1,11 union all select ‘aaa’,2,19 union
all select ‘aaa’,3,12 union all select ‘aaa’,1,18 union all select
‘aaa’,2,19 union all select ‘aaa’,3,21 union all select ‘bbb’,1,11 union
all select ‘bbb’,2,19 union all select ‘bbb’,3,12 union all select
‘bbb’,1,18 union all select ‘bbb’,2,19 union all select ‘bbb’,3,21
—-查询语句 select distinct tname,(select sum(tscor) from testFlag
where tflag=1 and testFlag.tname = t.tname) as ‘flag1’,(select
sum(tscor) from testFlag where tflag=2 and testFlag.tname = t.tname) as
‘flag2’,(select sum(tscor) from testFlag where tflag=3 and
testFlag.tname = t.tname) as ‘flag3’ from testFlag t group by
tname,tflag

SQL code

  1 –合并列值
  2 –原著:邹建
  3 –改编:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)  2007-12-16  广东深圳
  4 
  5 –表结构,数据如下:
  6 /*
  7 id    value 
  8 —– —— 
  9 1    aa 
 10 1    bb 
 11 2    aaa 
 12 2    bbb 
 13 2    ccc 
 14 */
 15 –需要得到结果:
 16 /*
 17 id    values 
 18 —— ———– 
 19 1      aa,bb 
 20 2      aaa,bbb,ccc 
 21 即:group by id, 求value 的和(字符串相加)
 22 */
 23 –1. 旧的解决方法(在sql server 2000中只能用函数解决。) 
 24 –1. 创建处理函数
 25 create table tb(id int, value varchar(10)) 
 26 insert into tb values(1, ‘aa’) 
 27 insert into tb values(1, ‘bb’) 
 28 insert into tb values(2, ‘aaa’) 
 29 insert into tb values(2, ‘bbb’) 
 30 insert into tb values(2, ‘ccc’) 
 31 go 
 32 
 33 create function dbo.f_str(@id int) 
 34 returns varchar(8000) 
 35 as 
 36 begin 
 37     declare @r varchar(8000) 
 38     set @r = ” 
 39     select @r = @r + ‘,’ + value from tb where id=@id 
 40     return stuff(@r, 1, 1, ”) 
 41 end 
 42 go 
 43 
 44 — 调用函数
 45 SELECt id, value = dbo.f_str(id) FROM tb GROUP BY id 
 46 
 47 drop table tb 
 48 drop function dbo.f_str 
 49 
 50 /* 
 51 id          value      
 52 ———– ———– 
 53 1          aa,bb 
 54 2          aaa,bbb,ccc 
 55 (所影响的行数为2 行)
 56 */ 
 57 
 58 –2、另外一种函数. 
 59 create table tb(id int, value varchar(10)) 
 60 insert into tb values(1, ‘aa’) 
 61 insert into tb values(1, ‘bb’) 
 62 insert into tb values(2, ‘aaa’) 
 63 insert into tb values(2, ‘bbb’) 
 64 insert into tb values(2, ‘ccc’) 
 65 go 
 66 
 67 –创建一个合并的函数
 68 create function f_hb(@id int) 
 69 returns varchar(8000) 
 70 as 
 71 begin 
 72   declare @str varchar(8000) 
 73   set @str = ” 
 74   select @str = @str + ‘,’ + cast(value as varchar) from tb where id = @id 
 75   set @str = right(@str , len(@str) – 1) 
 76   return(@str) 
 77 End 
 78 go 
 79 
 80 –调用自定义函数得到结果:
 81 select distinct id ,dbo.f_hb(id) as value from tb 
 82 
 83 drop table tb 
 84 drop function dbo.f_hb 
 85 
 86 /* 
 87 id          value      
 88 ———– ———– 
 89 1          aa,bb 
 90 2          aaa,bbb,ccc 
 91 (所影响的行数为2 行)
 92 */ 
 93 
 94 –2. 新的解决方法(在sql server 2005中用OUTER APPLY等解决。) 
 95 create table tb(id int, value varchar(10)) 
 96 insert into tb values(1, ‘aa’) 
 97 insert into tb values(1, ‘bb’) 
 98 insert into tb values(2, ‘aaa’) 
 99 insert into tb values(2, ‘bbb’) 
100 insert into tb values(2, ‘ccc’) 
101 go 
102 — 查询处理
103 select * from(select distinct id from tb)a outer apply( 
104         select [values]= stuff(replace(replace( 
105             ( 
106                 select value from tb n 
107                 where id = a.id 
108                 for xml auto 
109             ), ‘ <N value=”‘, ‘,’), ‘”/>’, ”), 1, 1, ”) 
110 )N 
111 drop table tb
112 
113 /* 
114 id          values 
115 ———– ———– 
116 1          aa,bb 
117 2          aaa,bbb,ccc 
118 
119 (2 行受影响) 
120 */ 
121 
122 –SQL2005中的方法
123 create table tb(id int, value varchar(10)) 
124 insert into tb values(1, ‘aa’) 
125 insert into tb values(1, ‘bb’) 
126 insert into tb values(2, ‘aaa’) 
127 insert into tb values(2, ‘bbb’) 
128 insert into tb values(2, ‘ccc’) 
129 go 
130 
131 select id, [values]=stuff((select ‘,’+[value] from tb t where id=tb.id for xml path(”)), 1, 1, ”) 
132 from tb 
133 group by id 
134 
135 /* 
136 id          values 
137 ———– ——————– 
138 1          aa,bb 
139 2          aaa,bbb,ccc 
140 
141 (2 row(s) affected) 
142 
143 */ 
144 
145 drop table tb

合并列值 –******************************************************************************************* 表结构,数据如下: id value —–
—— 1 aa 1 bb 2 aaa 2 bbb 2 ccc 需要得到结果: id values
—— ———– 1 aa,bb 2 aaa,bbb,ccc 即:group
by id, 求 value 的谷青阳和(字符串相加)