求助,列转行比较排列问题

Small__Wolf 2012-07-11 02:07:34

Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'张XX' as '第一展员','100000.000000' as '回款金额','昌XX' as '第二展员','100000.000000' as '回款金额','赵XX' as '第三展员','50000' as '回款金额','' as '第四展员','' as '回款金额'
union all
Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'赵XX' as '第一展员','50000.000000' as '回款金额','张XX' as '第二展员','20000.000000' as '回款金额','昌XX' as '第三展员','10000' as '回款金额','' as '第四展员','' as '回款金额'
union all
Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'昌XX' as '第一展员','10000.000000' as '回款金额','赵XX' as '第二展员','50000.000000' as '回款金额','张XX' as '第三展员','90000' as '回款金额','' as '第四展员','' as '回款金额'
union all
Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'赵XX' as '第一展员','10000.000000' as '回款金额','昌XX' as '第二展员','10000.000000' as '回款金额','张XX' as '第三展员','180000' as '回款金额','' as '第四展员','' as '回款金额'


将上面的结果转换成下面的格式


Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'张XX' as '第一展员','390000.000000' as '回款金额','赵XX' as '第二展员','160000.000000' as '回款金额','昌XX' as '第三展员','130000.000000' as '回款金额','' as '第四展员','' as '回款金额'




...全文
139 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Small__Wolf 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]



Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'张XX' as '第一展员','100000.000000' as '回款金额1','昌XX' as '第二展员','100000.000000' as '回款金额2','赵XX' as '第三展员','50000' as '回款金额3','' as '第四展员','' as '回款金额4'
union all
Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'赵XX' as '第一展员','50000.000000' as '回款金额','张XX' as '第二展员','20000.000000' as '回款金额','昌XX' as '第三展员','10000' as '回款金额','' as '第四展员','' as '回款金额'
union all
Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'昌XX' as '第一展员','10000.000000' as '回款金额','赵XX' as '第二展员','50000.000000' as '回款金额','张XX' as '第三展员','90000' as '回款金额','' as '第四展员','' as '回款金额'
union all
Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'赵XX' as '第一展员','10000.000000' as '回款金额','昌XX' as '第二展员','10000.000000' as '回款金额','张XX' as '第三展员','180000' as '回款金额','' as '第四展员','' as '回款金额'

union all
Select '方XX' as '客户名称','680000.000000' as '累计消费金额' ,'刘XX' as '第一展员','100000.000000' as '回款金额1','彭XX' as '第二展员','100000.000000' as '回款金额2','赵XX' as '第三展员','50000' as '回款金额3','' as '第四展员','' as '回款金额4'
union all
Select '方XX' as '客户名称','680000.000000' as '累计消费金额' ,'刘XX' as '第一展员','50000.000000' as '回款金额','彭XX' as '第二展员','20000.000000' as '回款金额','昌XX' as '第三展员','10000' as '回款金额','' as '第四展员','' as '回款金额'



如果有多个客户,有点问题,请按客户统计他对应的展员排名!
Small__Wolf 2012-07-11
  • 打赏
  • 举报
回复
感谢 shmilywcd!
天-笑 2012-07-11
  • 打赏
  • 举报
回复

;with t as (
Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'张XX' as '第一展员','100000.000000' as '回款金额1','昌XX' as '第二展员','100000.000000' as '回款金额2','赵XX' as '第三展员','50000' as '回款金额3','' as '第四展员','' as '回款金额4'
union all
Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'赵XX' as '第一展员','50000.000000' as '回款金额','张XX' as '第二展员','20000.000000' as '回款金额','昌XX' as '第三展员','10000' as '回款金额','' as '第四展员','' as '回款金额'
union all
Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'昌XX' as '第一展员','10000.000000' as '回款金额','赵XX' as '第二展员','50000.000000' as '回款金额','张XX' as '第三展员','90000' as '回款金额','' as '第四展员','' as '回款金额'
union all
Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'赵XX' as '第一展员','10000.000000' as '回款金额','昌XX' as '第二展员','10000.000000' as '回款金额','张XX' as '第三展员','180000' as '回款金额','' as '第四展员','' as '回款金额'
),t2 as (
select [客户名称],[累计消费金额] ,[第一展员] as [展员],convert(float,[回款金额1]) as [回款金额] from t union all
select [客户名称],[累计消费金额] ,[第二展员],[回款金额2] from t union all
select [客户名称],[累计消费金额] ,[第三展员],[回款金额3] from t union all
select [客户名称],[累计消费金额] ,[第四展员],[回款金额4] from t
)
----drop table tmp
select * into tmp from t2 where [展员] is not null and len([展员])>=1
--select * from tmp
declare @s nvarchar(4000),
@q int
set @s=''
;with t as (
select top 10000 [展员],row_number() over(order by sum([回款金额]) ) as Seq from tmp group by [展员] order by sum([回款金额]) desc
)

Select @s=@s+','+quotename(a.[展员])+'=sum(case when [展员]='+quotename(a.[展员],'''')+' then [回款金额] else 0 end)'
from tmp a left join t b on a.[展员] = b.[展员]
group by a.[展员],b.Seq order by b.Seq desc

exec('select [客户名称],max([累计消费金额]) as [累计消费金额] '+@s+' from tmp group by [客户名称]')
----------------------------------------------

客户名称 累计消费金额 张XX 赵XX 昌XX
---- ------------- ---------------------- ---------------------- ----------------------
梁XX 680000.000000 390000 160000 130000


天-笑 2012-07-11
  • 打赏
  • 举报
回复

;with t as (
Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'张XX' as '第一展员','100000.000000' as '回款金额1','昌XX' as '第二展员','100000.000000' as '回款金额2','赵XX' as '第三展员','50000' as '回款金额3','' as '第四展员','' as '回款金额4'
union all
Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'赵XX' as '第一展员','50000.000000' as '回款金额','张XX' as '第二展员','20000.000000' as '回款金额','昌XX' as '第三展员','10000' as '回款金额','' as '第四展员','' as '回款金额'
union all
Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'昌XX' as '第一展员','10000.000000' as '回款金额','赵XX' as '第二展员','50000.000000' as '回款金额','张XX' as '第三展员','90000' as '回款金额','' as '第四展员','' as '回款金额'
union all
Select '梁XX' as '客户名称','680000.000000' as '累计消费金额' ,'赵XX' as '第一展员','10000.000000' as '回款金额','昌XX' as '第二展员','10000.000000' as '回款金额','张XX' as '第三展员','180000' as '回款金额','' as '第四展员','' as '回款金额'
),t2 as (
select [客户名称],[第一展员] as [展员],convert(float,[回款金额1]) as [回款金额] from t union all
select [客户名称],[第二展员],[回款金额2] from t union all
select [客户名称],[第三展员],[回款金额3] from t union all
select [客户名称],[第四展员],[回款金额4] from t
)
----drop table tmp
select * into tmp from t2 where [展员] is not null and len([展员])>=1
--select * from tmp
declare @s nvarchar(4000),
@q int
set @s=''
;with t as (
select top 10000 [展员],row_number() over(order by sum([回款金额]) ) as Seq from tmp group by [展员] order by sum([回款金额]) desc
)

Select @s=@s+','+quotename(a.[展员])+'=sum(case when [展员]='+quotename(a.[展员],'''')+' then [回款金额] else 0 end)'
from tmp a left join t b on a.[展员] = b.[展员]
group by a.[展员],b.Seq order by b.Seq desc

exec('select [客户名称],avg([回款金额]) as [回款金额] '+@s+' from tmp group by [客户名称]')
---------------------------------------
客户名称 回款金额 张XX 赵XX 昌XX
---- ---------------------- ---------------------- ---------------------- ----------------------
梁XX 56666.6666666667 390000 160000 130000
Small__Wolf 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html
[/Quote]



我这个需要统计同一个人的回款金额总计,按照金额高低,从左到右依次排列,该如何弄?能否针对我上面的例子写一个函数,多谢!

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧