sql求指教,药品名相同的销售量相加

药品名销售量售往000232病房000230西药房现在我想整合成药品名销售量售往000262病房\西药房求大神指教啊... 药品名 销售量 售往
0002 32 病房
0002 30 西药房
现在我想整合成
药品名 销售量 售往
0002 62 病房\西药房求大神指教啊
展开
 我来答
frogley
2013-08-15 · TA获得超过1854个赞
知道小有建树答主
回答量:1008
采纳率:50%
帮助的人:1083万
展开全部
--这里的难点在于第三个字段需要做字符串的聚合,并需要去除重复的情况。这只有自己写函数实现。
--创建测试数据
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 [药品名]

最后结果如下:

百度网友439f3ac63
2013-08-15 · TA获得超过252个赞
知道小有建树答主
回答量:348
采纳率:0%
帮助的人:66.9万
展开全部
这个在设计数据库的时候就应该吧药品名作为主键。就不会出现这种情况了
查询的话select 药品名,sum(销售量),售往 from 表名 group by 药品名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
p_rain2002
2013-08-15 · 超过53用户采纳过TA的回答
知道小有建树答主
回答量:145
采纳率:0%
帮助的人:126万
展开全部
你是什么数据库呢?
追问
mssqlserver
追答
select 药品名,sum(销售量),售往=stuff(
select '\'+售往 from t b where a.药品名=b.药品名
for xml path('')),1,1,'' )
from t a
group by 药品名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式