经典实例-sqlserver2008201203231005

转载 2012年03月23日 10:10:54

某表tb,一列a
a
str1
str2
str3
str4
str5
str6
str7
str8
....
想把每两行的字符串连接起来,如
a
str1str2
str3str4
str5str6
......

再求高手

最佳答案1:

create table tb(a varchar(10))
insert into tb values('str1')
insert into tb values('str2')
insert into tb values('str3')
insert into tb values('str4')
insert into tb values('str5')
insert into tb values('str6')
insert into tb values('str7')
insert into tb values('str8')
go

select a = replace(stuff((select ',' + a from
(
 
select t.* , px = (row_number() over(order by a) - 1)/2 from tb t
) m
where m.px = n.px for xml path('')) , 1 , 1 , ''),',','')
from
(
 
select t.* , px = (row_number() over(order by a) - 1)/2 from tb t
) n
group by px

drop table tb

/*
a
------------
str1str2
str3str4
str5str6
str7str8

(4 行受影响)
*/

 

最佳答案2:

create table tb(a varchar(10))
insert into tb values('str1')
insert into tb values('str2')
insert into tb values('str3')
insert into tb values('str4')
insert into tb values('str5')
insert into tb values('str6')
insert into tb values('str7')
insert into tb values('str8')
go

--创建函数解决:
create function dbo.f_str(@px int) returns varchar(1000)
as
begin
 
declare @str varchar(1000)
 
select @str = isnull(@str , '') + cast(a as varchar) from (select t.* , px = (((select count(1) from tb where a < t.a) + 1) - 1)/2 from tb t) m where px = @px
 
return @str
end
go


--调用函数
select dbo.f_str(px) a from
(
 
select t.* , px = (((select count(1) from tb where a < t.a) + 1) - 1)/2 from tb t
) m
group by px

drop function dbo.f_str

drop table tb

/*

a                    
----------------------
str1str2
str3str4
str5str6
str7str8

(所影响的行数为 4 行)
*/

相关文章推荐

sqlserver数据库操作大全——常用语句/技巧集锦/经典语句

本文为累计整理,有点乱,凑合着看吧! ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ ☆ ☆ ☆ ...
  • a125138
  • a125138
  • 2012年08月28日 22:25
  • 5767

SQLServer经典SQL大全

经典SQL语句大全 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql...

SqlServer数据库操作大全——常用语句/技巧集锦/经典语句 【转载】

SqlServer数据库操作大全——常用语句/技巧集锦/经典语句

【SqlServer】经典SQL语句

一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql serve...

sqlserver 经典关联查询语句

sqlserver关联查询: SELECT EI.EMPLOYEE_NAME AS employeeName, EI.EMPLOYEE_NUMBER AS employeeNu...

sqlserver sql语句|经典sql语句|实用sql语句

sqlserver sql语句|经典sql语句|实用sql语句一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database db...

Linux环境PHP5.5以上连接SqlServer2008【全网最经典无错版】

linux版本:64位CentOS 6.4Nginx版本:nginx1.8.0php版本:php5.5.28Sqlserver:2008 关于Linux环境安装Nginx+PHP参考《Linux环境N...
  • 21aspnet
  • 21aspnet
  • 2015年08月12日 21:06
  • 14912

SQL Server 2008编程入门经典笔记:SQLServer存储和索引结构

SQL Server存储机制1、数据库2、区段 区段是为表和索引分配空间的3、页 每个区段包涵8页。 页类型:数据、索引。 1)页拆分4、行 行最大可达8KB。1024列5、稀疏列(高级) ...

sqlserver sql语句|经典sql语句|实用sql语句

sqlserver sql语句|经典sql语句|实用sql语句 原文地址 http://www.blogjava.net/wangdetian168/archive/2010/07/27/337...

VS2010连接SqlServer2008数据库,Oracle10g数据库,Mysql5.524数据库,Access2013数据库经典教程,不看肯定后悔

今天看vs2010多态,既然数据库类库都是实现接口的信息,那么我直接使用接口来连接不同数据库,这不是很符合接口的性质哈   设计了VS2010连接SqlServer2008,Oracle10g,My...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典实例-sqlserver2008201203231005
举报原因:
原因补充:

(最多只允许输入30个字)