在论坛中出现的比较难的sql问题:25(字符串拆分3)
原文:在论坛中出现的比较难的sql问题:25(字符串拆分3)
最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。
所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。
1、求教超难的字符串去重问题?
http://bbs.csdn.net/topics/390719864
现在小弟有如此一数据表
结构如下:
select 1 as tname,'01:0102;02:0102;03:0102;04:0102,0101;05:0102'as tstr into tb1
insert into tb1 select 2,'01:0101,0102'
insert into tb1 select 3,'01:0102;02:0102;03:0102;04:0102;05:0102'
insert into tb1 select 4,'01:0102,0103'
insert into tb1 select 5,'0104'
insert into tb1 select 6,'01:0102;02:0102;03:0102;04:0102;05:0102'
insert into tb1 select 7,'01:0102;02:0102;03:0102;04:0102,0101;05:0102'
上表数据代表的含义
tname 为序号,不用管
tstr 为编组内容
01:0101,0102 意思为01组,组员为编号0101和0102两人组成。
01:0102;02:0102 意思为编号0102的组员,即在01组,又在02组。
可见有很多重复。
现在查询想得到如下结果:即找出这几些编组到底有哪些组员:
0101,0102,0103,0104
求存储过程,不能创建自定义函数,谢谢
注意数据库版本为sqlserver 2k
我的方法:
-
--drop table tbl
-
-
create table tbl(tname int,tstr varchar(100))
-
-
insert into tbl
-
select 1 ,'01:0102;02:0102;03:0102;04:0102,0101;05:0102'
-
-
insert into tbl
-
select 2,'01:0101,0102'
-
-
insert into tbl
-
select 3,'01:0102;02:0102;03:0102;04:0102;05:0102'
-
-
insert into tbl
-
select 4,'01:0102,0103'
-
-
insert into tbl
-
select 5,'0104'
-
-
insert into tbl
-
select 6,'01:0102;02:0102;03:0102;04:0102;05:0102'
-
-
insert into tbl
-
select 7,'01:0102;02:0102;03:0102;04:0102,0101;05:0102'
-
go
-
declare @str varchar(1000)
-
-
set @str = ''
-
-
select @str = @str + ','+ [编组]
-
from
-
(
-
select --*,
-
distinct
-
case when vv like '%:%' then SUBSTRING(vv,charindex(':',vv)+1,len(vv))
-
else vv
-
end '编组'
-
from
-
(
-
select tname,
-
tstr,
-
v,
-
SUBSTRING(t.v, number ,CHARINDEX(',',t.v+',',number)-number) vv
-
from
-
(
-
select tname,
-
tstr,
-
SUBSTRING(t.tstr, number ,CHARINDEX(';',t.tstr+';',number)-number) v
-
from tbl t,master..spt_values s
-
where s.number >=1
-
and s.type = 'P'
-
and SUBSTRING(';'+t.tstr,s.number,1) = ';'
-
)t,master..spt_values s
-
where s.number >=1
-
and s.type = 'P'
-
and SUBSTRING(','+t.v,s.number,1) = ','
-
)t
-
)t
-
order by [编组]
-
-
select stuff(@str,1,1,'') as [编组]
-
/*
-
编组
-
0101,0102,0103,0104
-
*/
在论坛中出现的比较难的sql问题:25(字符串拆分3)的更多相关文章
- 在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)
原文:在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...
- 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)
原文:在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时.分钟计算问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. ...
- 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)
原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...
- 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)
原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)
原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存)
原文:在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...
- 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)
原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...
- 在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题)
原文:在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...
- 在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名)
原文:在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串)
原文:在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
随机推荐
- Linux中进程的几种状态
linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态. Linux进程状态:R (TASK_RUNNING),可执行状态. 只有在该状 ...
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第7节 SpringBoot常用Starter介绍和整合模板引擎Freemaker、thymeleaf_28..SpringBoot Starter讲解
笔记 1.SpringBoot Starter讲解 简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-b ...
- YII2 输出 执行的 SQL 语句,直接用程序输出
$query = User::find() ->,,,]) ->select(['username']) // 输出SQL语句 $commandQuery = clone $query; ...
- flutter 权限申请
添加依赖 permission_handler: ^3.2.2 androidmanifest.xml添加对应的用户权限 在flutter 中app入口申请权限: import 'package:fl ...
- Spring的@ExceptionHandler和@ControllerAdvice统一处理异常
之前敲代码的时候,避免不了各种try..catch, 如果业务复杂一点, 就会发现全都是try…catch try{ ..........}catch(Exception1 e){ ......... ...
- iptables 的安装与配置
iptables 的安装与配置 由于centos7默认是使用firewall作为防火墙,下面介绍如何将系统的防火墙设置为iptables. #停止firewall systemctl stop fi ...
- 【Redis】Redis 主从模式搭建
主从模式介绍 Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据 ...
- 【php】PHP制作QQ微信支付宝三合一收款码
分析 微信扫这个,支付宝扫那个,不仅要加载多张二维码,还要加css/js让它变的好看,作为一个又懒又不想写这些东西的程序猿来说,这可不行. 那能不能把QQ微信支付宝三合一,只需要扫一个收款码就行呢? ...
- Qt编写自定义控件70-扁平化flatui
一.前言 对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产生的质感色彩反 ...
- 123457123457#0#----com.MC.konglongtianse222----前拼后广--恐龙填色mc-mc1111
com.MC.konglongtianse222----前拼后广--恐龙填色mc
