在论坛中出现的比较难的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格式字符串) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
 
随机推荐
- python+opencv图像变换的两种方法cv2.warpAffine和cv2.warpPerspective
			
本文链接:https://blog.csdn.net/qq_27261889/article/details/80720359 # usr/bin/env python # coding: utf- ...
 - Object.keys()、Object.values()、Object.entries()的用法
			
一.Object.keys(obj) 参数:要返回其枚举自身属性的对象 返回值:一个表示给定对象的所有可枚举属性的字符串数组 处理对象,返回可枚举的属性数组 let person = {name:&q ...
 - Acunetix Web Vulnerability Scanner abbr. AWVS
			
awvs 中文手册详细版 - 木讷 - 博客园https://www.cnblogs.com/iamver/p/7124718.html Download Acunetix Trialhttps:// ...
 - 从0开始学爬虫11之使用requests库下载图片
			
从0开始学爬虫11之使用requests库下载图片 # coding=utf-8 import requests def download_imgage(): ''' demo: 下载图片 ''' h ...
 - RestSharp - Ignore SSL errors
			
项目启动时,添加下面代码: 项目启动时,添加 public App() { ServicePointManager.ServerCertificateValidationCallback += (se ...
 - Qt获取时间戳作为图片名
			
Qt获取时间戳作为图片名 //保存图片 void SaveRealsenseImg() { QString picIndexName = dataSavePath; picIndexName.appe ...
 - URL相关的工具类
			
package com.opslab.util.web; import com.opslab.util.CharUtil;import com.opslab.util.CharsetUtil;impo ...
 - k8s-基础环境配置(六)
			
hostname配置1)修改主机名hostnamectl set-hostname xxx2)加入主机映射vim /etc/hosts……关闭selinuxsed -i '/^SELINUX/s/=. ...
 - 对于新手用c#中的delegate(委托)和event(事件)
			
一.delegate到底是什么东西 delegate允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m,说白了就是可以把方法当作参数传递.delegate既可以引用静态函数 ...
 - 【Leetcode_easy】1033. Moving Stones Until Consecutive
			
problem 1033. Moving Stones Until Consecutive 参考 1. Leetcode_easy_1033. Moving Stones Until Consecut ...
 
			
		