问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql 有个字段里存的用逗号相隔的数据。如何对这些数据进行统计

发布网友 发布时间:2022-04-29 19:31

我来回答

2个回答

懂视网 时间:2022-04-29 23:52

1 tiny,small,big 2 small,medium 3 tiny,big 期望得到结果: ID Value 1 tiny 1 small 1 big 2 small 2 medium 3 tiny 3 big 正文:   www.2cto.com   #需要处理的表 create table tbl_name (ID int ,mSize varchar(100)); insert into tbl_name values (1,‘tiny,small,big‘); insert into tbl_name values (2,‘small,medium‘); insert into tbl_name values (3,‘tiny,big‘);   #用于循环的自增表 create table incre_table (AutoIncreID int); insert into incre_table values (1); insert into incre_table values (2); insert into incre_table values (3);   select a.ID,substring_index(substring_index(a.mSize,‘,‘,b.AutoIncreID),‘,‘,-1)  from  tbl_name a join incre_table b on b.AutoIncreID <= (length(a.mSize) - length(replace(a.mSize,‘,‘,‘‘))+1) order by a.ID;   原理分析: 这个join最基本原理是笛卡尔积。通过这个方式来实现循环。 以下是具体问题分析: length(a.Size) - length(replace(a.mSize,‘,‘,‘‘))+1  表示了,按照逗号分割后,改列拥有的数值数量,下面简称n join过程的伪代码: 根据ID进行循环 { 判断:i 是否 <= n { 获取最靠近第 i 个逗号之前的数据, 即 substring_index(substring_index(a.mSize,‘,‘,b.ID),‘,‘,-1) i = i +1  } ID = ID +1  }  www.2cto.com     总结: 这种方法的缺点在于,我们需要一个拥有连续数列的独立表(这里是incre_table)。并且连续数列的最大值一定要大于符合分割的值的个数。 例如有一行的mSize 有100个逗号分割的值,那么我们的incre_table 就需要有至少100个连续行。 当然,mysql内部也有现成的连续数列表可用。如mysql.help_topic: help_topic_id 共有504个数值,一般能满足于大部分需求了。 改写后如下:   select a.ID,substring_index(substring_index(a.mSize,‘,‘,b.help_topic_id+1),‘,‘,-1)  from  tbl_name a join mysql.help_topic b on b.help_topic_id < (length(a.mSize) - length(replace(a.mSize,‘,‘,‘‘))+1) order by a.ID;       ========================================================================= 问题:  
有个表中的一个字段Author,如下
ID Author
1 张三
2 张三,李四
3 王五
4 李四
5 张三,李四,王五

现在想查询出这样的结果
Author Count
张三 3
李四 3
王五 2


sql server 解答:
if object_id(‘Tempdb..#Num‘) is not null 
drop table #Num
select top 100 ID=Identity(int,1,1) into #Num from syscolumns a,syscolumns b
Select
Author=substring(a.Author,b.ID,charindex(‘,‘,a.Author+‘,‘,b.ID)-b.ID),count(*)
from
table1 a,#Num b
where
charindex(‘,‘,‘,‘+a.Author,b.ID)=b.ID
group by substring(a.Author,b.ID,charindex(‘,‘,a.Author+‘,‘,b.ID)-b.ID);

table1替换成你自己表名,top 100 那个100你就替换个稍微大点的数吧

SQL逗号分隔的字段统计(摘自网络)

标签:

热心网友 时间:2022-04-29 21:00

select count(*)from table where 字段 like ‘%负责人%’

想复杂一些,就要写函数了

create function func_splitstring
(@str nvarchar(max),@split varchar(10))
returns @t Table (c1 varchar(100))
as
begin
declare @i int
declare @s int
set @i=1
set @s=1
while(@i>0)
begin
set @i=charindex(@split,@str,@s)
if(@i>0)
begin
insert @t(c1) values(substring(@str,@s,@i-@s))
end
else begin
insert @t(c1) values(substring(@str,@s,len(@str)-@s+1))
end
set @s = @i + 1
end
return
end

select * from dbo.func_splitstring('人1,人2,人3', ',')

执行完之后,然后再用in的方法来进行统计追问这里的负责人1 负责人2 是我随便 写的。只是想表达这是几个人名。张三,李四这种。全是未知的不知道有哪些人名。
好像和你给的答案不太一致。不过很谢谢你。
本应该设个一对多表就好弄了。可客户要求不设表。这人名全是随机录的。可他还想统计。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
填地方专项志愿会影响本科二批录取吗? 地方专项计划成绩不好的可以报吗 国家专项地方专项影响本科填报吗 地方专项计划滑档影响本科录取吗 报地方专项计划会影响高考录取吗 地方专项计划影响后续录取吗 电脑最高配组装机配置组装电脑什么配置比较好 台式组装游戏电脑配置组装电脑什么配置比较好 打游戏主机电脑配置台式电脑主要是玩游戏什么配置最合适 组装高配置台式电脑组装电脑什么配置比较好 家用吹风机怎么拆开 比较押韵的rap夸人女孩子的歌词? 求一段押韵的说唱歌词 古诗词改编成RAP的押韵词 写rap歌词有什么格式? RAP押韵有什么技巧? RAP怎样押韵? 酸豆角怎么泡又酸又脆 谁给解释下rap押韵技巧… 能不能详细告诉我说唱押韵 泡酸豆角七八天了,何时拿出来最合适? 有哪些可以rap 的押韵句子? 华为nova5ipro为什么更改密码时输入旧密码就闪退到上个界面? RAP 押韵表 酸豆角几天能吃 华为honor10设置隐私空间时输入密码后闪退是怎么回事?还能设置隐私空间吗? 酸豆角要腌多久才能吃 酸豆角要泡多久才能吃 为什么华为使用密码解开软件就闪退呢? 酸豆角要腌制多久才能吃啊? 酸豆角几天可以泡好 微信哪些公众号有每日最新话题? 广东中山哪里批发玩具便宜? 日本军官留着八字胡的意义是什么,生活上也是这样吗? 股票融资增发到底是怎么回事呀? 买盆栽在哪个app上买便宜 人有胡子代表年龄的多少,山羊有胡子代表什么意思? 广东哪有玩具批发市场? 昆明百合竹盆栽去哪里买? 八字胡的历史和来历? 想去申请个微信公众号,请问大家都最喜欢订阅什么话题的公众号呢? 八字胡子象征男人什么 买盆栽植物去哪个花卉市场好啊? 广东哪里有比较大的儿童玩具批发市场? 成年男人留哪种胡须显得很有男人味? 王者荣耀怎么免实名认证 我为什么会长八字胡? 新房装修后 在哪里可以买到吸收甲醛的盆栽植物? 你觉得娱乐圈中留胡子更有男人味的男星都有谁? 盆花应该怎么购买? 发行股票属于什么融资