如何合并数据到一行?

albert_skynet 2010-01-05 01:18:03

create table test
(
Uid int identity(1,1),
UserName varchar(20),
DateFlag varchar(10),
Part varchar(10),
LoginSum int
)
insert into test
select 'admin','200910','as',15 union all
select 'admin','200911','ad',25 union all
select 'admin','200909','ae',20 union all
select 'test','200909','af',31 union all
select 'test','200910','ag',31 union all
select 't','200910','ag',11

select * from test的结果是
UID UserName DateFlag Part LoginSum
1 admin 200910 as 15
2 admin 200911 ad 25
3 admin 200909 ae 20
4 test 200909 af 31
5 test 200910 ag 31
6 t 200910 ag 11

查询LoginSum最大的前两个记录,按用户名分组,将用户名相同的记录合并到一列

目标结果:
UserName DateFlag Part LoginSum DateFlag Part LoginSum
admin 200911 ad 25 200909 ae 20
test 200909 ag 31 200910 ag 31
t 200910 ag 11 null null null

使用
select * from test A where UID in (select top 2 UID from test
where Username=A.userName order by LoginSum desc)

可以将LoginSum最大的前两行记录查询到,如何将记录合并成一列?


...全文
90 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
albert_skynet 2010-01-05
  • 打赏
  • 举报
回复
josy正解
百年树人 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 josy 的回复:]
SQL codeselect a.UserName,a.DateFlag,a.Part,a.LoginSum,b.DateFlag,b.Part,b.LoginSumfrom
(select*,px=(selectcount(1)+1from testwhere username=t.usernameand uid>t.uid)from test t
) aleftjoin
(select*,p?-
[/Quote]
是“LoginSum最大的前两行”,修正一下
select a.UserName,a.DateFlag,a.Part,a.LoginSum,b.DateFlag,b.Part,b.LoginSum
from
(
select *,px=(select count(1)+1 from test where username=t.username and (LoginSum>t.LoginSum or LoginSum=t.LoginSum and uid<t.uid)) from test t
) a
left join
(
select *,px=(select count(1)+1 from test where username=t.username and (LoginSum>t.LoginSum or LoginSum=t.LoginSum and uid<t.uid)) from test t
) b
on a.username=b.username and a.px=b.px-1
where a.px=1

/**
UserName DateFlag Part LoginSum DateFlag Part LoginSum
-------------------- ---------- ---------- ----------- ---------- ---------- -----------
admin 200911 ad 25 200909 ae 20
test 200909 af 31 200910 ag 31
t 200910 ag 11 NULL NULL NULL

(所影响的行数为 3 行)

**/
--小F-- 2010-01-05
  • 打赏
  • 举报
回复
---修改
select
a.UserName,a.DateFlag,a.Part,a.LoginSum,b.DateFlag,b.Part,b.LoginSum
from
(select *,px=row_number()over(partition by username order by uid) from test t) a
left join
(select *,px=row_number()over(partition by username order by uid) from test t) b
on
a.username=b.username and a.px=b.px-1
where a.px=1
--小F-- 2010-01-05
  • 打赏
  • 举报
回复
---2005  try
select
a.UserName,a.DateFlag,a.Part,a.LoginSum,b.DateFlag,b.Part,b.LoginSum
from
(select *,px=row_number()over(partition by username order by uid) from test t) a
left join
(select *,px=px=row_number()over(partition by username order by uid) from test t) b
on
a.username=b.username and a.px=b.px-1
where a.px=1
百年树人 2010-01-05
  • 打赏
  • 举报
回复
select a.UserName,a.DateFlag,a.Part,a.LoginSum,b.DateFlag,b.Part,b.LoginSum
from
(
select *,px=(select count(1)+1 from test where username=t.username and uid>t.uid) from test t
) a
left join
(
select *,px=(select count(1)+1 from test where username=t.username and uid>t.uid) from test t
) b
on a.username=b.username and a.px=b.px-1
where a.px=1

/**
UserName DateFlag Part LoginSum DateFlag Part LoginSum
-------------------- ---------- ---------- ----------- ---------- ---------- -----------
admin 200909 ae 20 200911 ad 25
test 200910 ag 31 200909 af 31
t 200910 ag 11 NULL NULL NULL

(所影响的行数为 3 行)
**/
albert_skynet 2010-01-05
  • 打赏
  • 举报
回复
上午的是dateFlag分的,现在不用这个条件,只有用户名是确定的,其它没有确定的列,
nalnait 2010-01-05
  • 打赏
  • 举报
回复

1 admin 200910 as 15 呢?
--小F-- 2010-01-05
  • 打赏
  • 举报
回复
把分组前2放入临时表

然后再用上午写的那个语句来做
SQL77 2010-01-05
  • 打赏
  • 举报
回复
不是有写了么?
winstonbonaparte 2010-01-05
  • 打赏
  • 举报
回复
這樣的例子在上面好多的,你搜索一下吧
你在学习Python数据分析的时候,是否遇到过在这些问题? 别慌!这些都是数据科学入门常见问题。从入门到上手再到解决实际问题,数据科学看似复杂,但如果你掌握了正确的学习方法,完全可以极速入门。 【职场人进阶必备  数据分析/挖掘一点通】 如今的职场上,90%以上的岗位都会涉及数据问题。 以产品文案岗位为例,在一个新产品推向市场之前,文案需要考虑: 此时,可以关注一下市场上已有的相关产品推广数据,如:哪些文案打开率更高?哪些文案转化更好?目标用户的购买习惯如何? 以此作为下一步工作开展的依据,对产品文案工作者来说,可以少走很多弯路。 学会数据分析/挖掘,等于站巨人的肩膀上工作,轻松且高效。 【爬虫、数据分析、数据挖掘知识点三合一】数据问题一网打尽 本课程将知识点悉数融入实战项目,不空谈语法,帮助学员在实践中获取知识,目标是:让学员能自主完成数据采集、数据分析与数据挖掘。 学习完本课程,你可以熟练掌握: 【实战案例超实用,轻松拥有“睡后收入”!】 本课程以股票案例为主线,串联爬虫、数据分析以及数据挖掘多个知识点。 通过实战案例演练,你可以全面掌握股票收益的分析和预判方法,在收获新技能的同时,也有机会获得“睡后收入”! 四大优势: 三重权益:

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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