经典实例-sqlserver2008201203231005

数据库相关 专栏收录该内容
11 篇文章 0 订阅

某表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 行)
*/

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

本书详细介绍了各种数据库的SQL查询技术和一些基础的SQL查询语句,并且通过实例操作的方式讲解了如何插入、更新和删除数据等相关知识。另外,本书还介绍了如何使用SQL语句进行日期处理,以及一些其他的SQL语句查询操作,能够帮助你掌握相关的SQL知识。 第1章 检索记录 1 1.1 检索所有行和列 1 1.2 筛选行 2 1.3 查找满足多个查询条件的行 2 1.4 筛选列 3 1.5 创建有意义的列名 3 1.6 在WHERE 子句中引用别名列 4 1.7 串联多列的值 5 1.8 在SELECT 语句里使用条件逻辑 6 1.9 限定返回行数 6 1.10 随机返回若干行记录 8 1.11 查找Null 值 9 1.12 把Null 值转换为实际值 10 1.13 查找匹配项 10 第2章 查询结果排序 12 2.1 以指定顺序返回查询结果 12 2.2 多字段排序 13 2.3 依据子串排序 14 2.4 对含有字母和数字的列排序 15 2.5 排序时对Null 值的处理 17 2.6 依据条件逻辑动态调整排序项 23 第3章 多表查询 25 3.1 叠加两个行集 25 3.2 合并相关行 27 3.3 查找两个表中相同的行 28 3.4 查找只存在于一个表中的数据 30 3.5 从一个表检索与另一个表不相关的行 33 3.6 新增连接查询而不影响其他连接查询 34 3.7 确定两个表是否有相同的数据 36 3.8 识别并消除笛卡儿积 42 3.9 组合使用连接查询与聚合函数 44 3.10 组合使用外连接查询与聚合函数 48 3.11 从多个表中返回缺失值 51 3.12 在运算和比较中使用Null 54 第4章 插入、更新和删除 56 4.1 插入新记录 57 4.2 插入默认值 57 4.3 使用Null 覆盖默认值 58 4.4 复制数据到另一个表 59 4.5 复制表定义 59 4.6 多表插入 60 4.7 禁止插入特定列 62 4.8 更新记录 63 4.9 当相关行存在时更新记录 64 4.10 使用另一个表的数据更新记录 64 4.11 合并记录 67 4.12 删除全表记录 69 4.13 删除指定记录 69 4.14 删除单行记录 69 4.15 删除违反参照完整性的记录 70 4.16 删除重复记录 70 4.17 删除被其他表参照的记录 72 第5章 元数据查询 74 5.1 列举模式中的表 74 5.2 列举字段 75 5.3 列举索引列 76 5.4 列举约束 77 5.5 列举非索引外键 78 5.6 用SQL 生成SQL 81 5.7 描述Oracle 数据字典视图 83 第6章 字符串处理 85 6.1 遍历字符串 85 6.2 嵌入引号 87 6.3 统计字符出现的次数 88 6.4 删除不想要的字符 89 6.5 分离数字和字符数据 91 6.6 判断含有字母和数字的字符串 94 6.7 提取姓名的首字母 99 6.8 按照子字符串排序 102 6.9 根据字符串里的数字排序 103 6.10 创建分隔列表 109 6.11 分隔数据转换为多值IN 列表 114 6.12 按字母表顺序排列字符 119 6.13 识别字符串里的数字字符 124 6.14 提取第n 个分隔子字符串 130 6.15 解析IP 地址 136 第7章 数值处理 139 7.1 计算平均值 139 7.2 查找最小值和最大值 141 7.3 求和 142 7.4 计算行数 144 7.5 计算非Null 值的个数 146 7.6 累计求和 146 7.7 计算累计乘积 149 7.8 计算累计差 151 7.9 计算众数 152 7.10 计算中位数 155 7.11 计算百分比 158 7.12 聚合Null 列 160 7.13 计算平均值时去掉最大值和最小值 161 7.14 将含有字母和数字的字符串转换为数字 163 7.15 修改累计值 165 第8章 日期运算 168 8.1 年月日加减法 168 8.2 计算两个日期之间的天数 170 8.3 计算两个日期之间的工作日天数 172 8.4 计算两个日期之间相差的月份和年份 176 8.5 计算两个日期之间相差的秒数、分钟数和小时数 178 8.6 统计一年中有多少个星期一 180 8.7 计算当前记录和下一条记录之间的日期差 191 第9章 日期处理 196 9.1 判断闰年 196 9.2 计算一年有多少天 203 9.3 从给定日期值里提取年月日时分秒 205 9.4 计算一个月的第 一天和最后一天 207 9.5 列出一年中所有的星期五 209 9.6 找出当前月份的第 一个和最后一个星期一 216 9.7 生成日历 222 9.8 列出一年中每个季度的开始日期和结束日期 239 9.9 计算一个季度的开始日期和结束日期 243 9.10 填补缺失的日期 249 9.11 依据特定时间单位检索数据 258 9.12 比较特定的日期要素 259 9.13 识别重叠的日期区间 262 第10章 区间查询 268 10.1 定位连续的值区间 268 10.2 计算同一组或分区的行之间的差 273 10.3 定位连续值区间的开始值和结束值 281 10.4 为值区间填充缺失值 285 10.5 生成连续的数值 289 第11章 高级查询 293 11.1 结果集分页 293 11.2 跳过n 行记录 296 11.3 在外连接查询里使用OR 逻辑 298 11.4 识别互逆的记录 301 11.5 提取最靠前的n 行记录 302 11.6 找出最大和最小的记录 304 11.7 查询未来的行 305 11.8 行值轮转 308 11.9 对结果排序 311 11.10 删除重复项 312 11.11 查找骑士值 314 11.12 生成简单的预测 321 第12章 报表和数据仓库 329 12.1 变换结果集成一行 329 12.2 变换结果集成多行 331 12.3 反向变换结果集 339 12.4 反向变换结果集成一列 340 12.5 删除重复数据 343 12.6 变换结果集以实现跨行计算 346 12.7 创建固定大小的数据桶 347 12.8 创建预定数目的桶 351 12.9 创建水平直方图 355 12.10 创建垂直直方图 357 12.11 返回非分组列 360 12.12 计算简单的小计 365 12.13 计算所有可能的表达式组合的小计 368 12.14 识别非小计行 377 12.15 使用CASE 表达式标记行数据 379 12.16 创建稀疏矩阵 380 12.17 按照时间单位分组 382 12.18 多维度聚合运算 385 12.19 动态区间聚合运算 387 12.20 变换带有小计的结果集 394 第13章 层次查询 398 13.1 展现父子关系 399 13.2 展现祖孙关系 402 13.3 创建层次视图 407 13.4 找出给定的父节点对应的所有子节点 414 13.5 确认叶子节点、分支节点和根节点 418 第14章 杂项 426 14.1 使用SQL Server 的PIVOT 操作符创建交叉报表 426 14.2 使用SQL Server 的UNPIVOT 操作符逆向转换交叉报表 428 14.3 使用Oracle 的MODEL 子句变换结果集 430 14.4 从不固定位置提取字符串的元素 433 14.5 计算一年有多少天 436 14.6 查找含有数字和字母的字符串 437 14.7 在Oracle 中把整数转换成二进制 439 14.8 变换已排名的结果集 442 14.9 为两次变换后的结果集增加列标题 445 14.10 在Oracle 中把标量子查询转换为复合子查询 456 14.11 解析串行化的数据 458 14.12 计算比重 462 14.13 从Oracle 中生成CSV 格式的输出 464 14.14 找出不匹配某个格式的文本 469 14.15 使用内嵌视图转换数据 471 14.16 测试一组数据中是否存在某个值 472 附录A 窗口函数简介1 476 附录B 重温Rozenshtein 500
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值