SQL 怎么把横向数据变成竖向数据? 150

怎么从以上图中提取以下要求的数据要求:1、提取一个客户,最近4次的业务员和日期,从右到左,依次是最近时间2、首选业务员提取的是最近一个月没有服务过的这个客户,打个比方:赵... 怎么从以上图中提取以下要求的数据要求:1、提取一个客户,最近4次的业务员和日期,从右到左,依次是最近时间2、首选业务员提取的是最近一个月没有服务过的这个客户,打个比方:赵春艳这个客户最近一个月没有服务过的业务员有:小徐,方飞,苏荷,桃桃,总共4个,从中选择距离时间最远的那个为首选业务员,其余三个根据最远时间到最近时间依次填入候选业务员表格数据上传到网盘了,哪位高手能帮忙看看,谢谢链接: https://pan.baidu.com/s/1KiCNvoNBvYSKY25KO9-gvQ 提取码: cd4e 展开
 我来答
sarven1986
2020-03-11 · TA获得超过110个赞
知道小有建树答主
回答量:268
采纳率:87%
帮助的人:33.9万
展开全部

学的不精,我只能写的比较复杂


declare @client varchar(50),@nc varchar(50)

create table #tmp1

(客户 varchar(50),昵称 varchar(50),补单日期 datetime,业务员 varchar(50),业务员序号 int)

create table #tmp2

(客户 varchar(50),昵称 varchar(50),

补单日期1 datetime,业务员1 varchar(50),

补单日期2 datetime,业务员2 varchar(50),

补单日期3 datetime,业务员3 varchar(50),

补单日期4 datetime,业务员4 varchar(50),

首选业务员 varchar(50),候选业务员 varchar(50)

)

declare @satrap1 varchar(50),@satrap2 varchar(50),@satrap3 varchar(50),@satrap4 varchar(50)

declare @date1 datetime,@date2 datetime,@date3 datetime,@date4 datetime

declare cursor_client cursor for select DISTINCT 客户,昵称 from T_CLIENT

OPEN cursor_client

fetch next from cursor_client into @client,@nc

while @@FETCH_STATUS=0

begin

insert #tmp1 select 客户,昵称,补单日期,业务员,ROW_NUMBER() over (order by 补单日期 desc) from T_CLIENT WHERE 客户=@client group by 客户,昵称,补单日期,业务员

select @satrap1=业务员,@date1=补单日期 from #tmp1 where 客户=@client and 业务员序号=1

select @satrap2=业务员,@date2=补单日期 from #tmp1 where 客户=@client and 业务员序号=2

select @satrap3=业务员,@date3=补单日期 from #tmp1 where 客户=@client and 业务员序号=3

select @satrap4=业务员,@date4=补单日期 from #tmp1 where 客户=@client and 业务员序号=4

insert #tmp2 select @client,@nc,@date1,@satrap1,@date2,@satrap2,@date3,@satrap3,@date4,@satrap4,@satrap1,@satrap2+'-'+@satrap3+'-'+@satrap4

fetch next from cursor_client into @client,@nc

end

close cursor_client

deallocate cursor_client

select * from #tmp2

drop table #tmp1

drop table #tmp2


百度网友2bf2a4b
2020-02-20 · TA获得超过193个赞
知道小有建树答主
回答量:985
采纳率:52%
帮助的人:103万
展开全部

随缘写法···可能有更精简的,我这就赶着想赶着写的 你看看能看懂不,如果觉得对不懂可以联系我

select
nn.客户 客户,
nn.昵称 昵称,
nn.补单日期1 补单日期1,
nn.业务员1 业务员1,
nn.补单日期2 补单日期2,
nn.业务员2 业务员2,
nn.补单日期3 补单日期3,
nn.业务员3 业务员3,
nn.补单日期4 补单日期4,
nn.业务员4 业务员4,
nn.业务员1 首选业务员,
nn.业务员2||'-'||nn.业务员3||'-'||nn.业务员4 候选业务员
from (
select tt.a2 客户,tt.a3 昵称,wm_concat (case when tt.top=0 then tt.a0 else '' end) 补单日期1,
wm_concat (case when tt.top=0 then tt.a4 else ''end) 业务员1,
wm_concat (case when tt.top=1 then tt.a0 else  ''end) 补单日期2,
wm_concat (case when tt.top=1 then tt.a4 else ''end) 业务员2,
wm_concat (case when tt.top=2 then tt.a0 else ''end) 补单日期3,
wm_concat (case when tt.top=2 then tt.a4 else ''end) 业务员3,
wm_concat (case when tt.top=3 then tt.a0 else''end) 补单日期4,
wm_concat  (case when tt.top=3 then tt.a4 else ''end) 业务员4
from
(
select zz.* from
(
select  a.*,(select  count(1) from a a1 where a1.a2=a.a2 and a.a0<a1.a0) top from a ORDER BY A2,A0 DESC
) zz
where
zz.top<4
) tt group by tt.a2,tt.a3
) nn



追问

你好 ,图片太糊涂 看不清

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
AV小泉纯一狼
2020-03-04
知道答主
回答量:11
采纳率:0%
帮助的人:1.7万
展开全部
行转列不会?,用case when 或者 decode
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chaojixiewang
2020-02-29 · 超过27用户采纳过TA的回答
知道答主
回答量:361
采纳率:53%
帮助的人:39.1万
展开全部
什么数据库也不说?思路就是用case when 再通过行数判断就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式