当前位置: 代码迷 >> Sql Server >> 大牛们,怎么合并数据呢
  详细解决方案

大牛们,怎么合并数据呢

热度:55   发布时间:2016-04-24 19:52:23.0
大牛们,如何合并数据呢?

--测试数据
create table #temp(定单编号 nvarchar(20), 产品名称 nvarchar(20),数量 nvarchar(20),录入用户名 nvarchar(20))
insert into #temp
select '001','A产品名','10','张三' union all
select '001','B产品名','10','张三' union all
select '001','C产品名','10','张三' union all
select '002','A产品名','20','李四' union all
select '002','c产品名','10','李四' 
--相要的效果
定单编号                 产品名称                 数量                   录入用户名
-------------------- -------------------- -------------------- --------------------
001                  A产品名                 10                   张三
                     B产品名                 10                   
                     C产品名                 10                   
002                  A产品名                 20                   李四
                     c产品名                 10                   

------解决方案--------------------

--测试数据
create table #temp(定单编号 nvarchar(20), 产品名称 nvarchar(20),数量 nvarchar(20),录入用户名 nvarchar(20))
insert into #temp
select '001','A产品名','10','张三' union all
select '001','B产品名','10','张三' union all
select '001','C产品名','10','张三' union all
select '002','A产品名','20','李四' union all
select '002','c产品名','10','李四' 

select 定单编号=case when n1=1 then 定单编号 else '' end,产品名称,数量,
录入用户名=case when n2=1 then 录入用户名 else '' end
from 
(
select *,n1=(select count(*) from #temp b where a.定单编号=b.定单编号 and b.产品名称<=a.产品名称)
   ,n2=(select count(*) from #temp b where a.录入用户名=b.录入用户名 and b.产品名称<=a.产品名称)
from #temp a
)t


定单编号                 产品名称                 数量                   录入用户名
-------------------------------------------------------------------------------------
001 A产品名 10 张三
B产品名 10
C产品名 10
002 A产品名 20 李四
c产品名 10


------解决方案--------------------

create table #tb(定单编号 nvarchar(20), 产品名称 nvarchar(20),数量 nvarchar(20),录入用户名 nvarchar(20))
insert into #tb
select '001','A產品名','10','張三' union all
select '001','B產品名','10','張三' union all
select '001','C產品名','10','張三' union all
select '002','A產品名','20','李四' union all
select '002','c產品名','10','李四'

select 定单编号=case when rn=1 then 定单编号 else '' end,产品名称,数量,        录入用户名=case when rn=1 then 录入用户名 else '' end 
 from  (select rn= ROW_NUMBER() over (partition by [定单编号] order by [产品名称]), * from #tb) new_tb

drop table #tb 
  相关解决方案