sql求指教,药品名相同的销售量相加
药品名销售量售往000232病房000230西药房现在我想整合成药品名销售量售往000262病房\西药房求大神指教啊...
药品名 销售量 售往
0002 32 病房
0002 30 西药房
现在我想整合成
药品名 销售量 售往
0002 62 病房\西药房求大神指教啊 展开
0002 32 病房
0002 30 西药房
现在我想整合成
药品名 销售量 售往
0002 62 病房\西药房求大神指教啊 展开
3个回答
展开全部
--这里的难点在于第三个字段需要做字符串的聚合,并需要去除重复的情况。这只有自己写函数实现。
--创建测试数据
create table tt6 ([药品名] varchar(20),[销售量] int, [售往] varchar(20));
insert into tt6
select '0002',32,'病房' union all
select '0002',30,'西药房'
GO
--创建字符串聚合函数
if object_id(N'dbo.fn_merge_tt6',N'FN') is not null
drop function dbo.fn_merge_tt6
GO
create function dbo.fn_merge_tt6
--函数功能:字符串聚合及去除重复值
--详细出处参考:
(
@id varchar(100),
@separateStr varchar(20)--分隔符
)
returns varchar(8000)
as
begin
--字符串聚合
declare @s varchar(8000)
set @s = ''
select
@s = @s + [售往] + @separateStr
from tt6
where [药品名] = @id
--去除重复值
declare @value varchar(8000)--存储第一个分隔符前的值
declare @result varchar(8000)--存储唯一值的中间字符串
set @result = ''
--有值的场合
while charindex(@separateStr,@s) <> 0
begin
--取第一个分隔符前的值
set @value = left(@s,charindex(@separateStr,@s)-1)
--第一个分隔符前的值没在结果中出现
if charindex(@separateStr+@value+@separateStr,@separateStr+@result+@separateStr)=0
begin
--加入中间字符串
set @result = @result + @value + @separateStr
end
--去除第一个值以及最后面的分隔符(剔除法),继续循环判断
set @s = right(@s,(len(@s) - charindex(@separateStr,@s)-len(@separateStr)+1))
end
set @s = @result;
return left(@s,len(@s)-len(@separateStr));
end
GO
--查询
select [药品名],sum(销售量) [销售量],dbo.fn_merge_tt6([药品名],'\') [售往]
from tt6 group by [药品名]
最后结果如下:
展开全部
这个在设计数据库的时候就应该吧药品名作为主键。就不会出现这种情况了
查询的话select 药品名,sum(销售量),售往 from 表名 group by 药品名
查询的话select 药品名,sum(销售量),售往 from 表名 group by 药品名
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是什么数据库呢?
追问
mssqlserver
追答
select 药品名,sum(销售量),售往=stuff(
select '\'+售往 from t b where a.药品名=b.药品名
for xml path('')),1,1,'' )
from t a
group by 药品名
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询