求教一个SQL语句,关于排序问题

seven7769 2017-11-28 08:13:56
现在有如下两张表

1:bsn_company_info
表示例内容如下
id m_id name tel
1 2 小王有限公司 18658784412
2 3 小张有限公司 15878954215
.....

2:bsn_company_job
给示例内容如下
id m_id job_name add_time
1 2 装配工 2017-11-20
2 2 仓管员 2017-11-21
3 3 厨师 2017-10-25
4 3 帮工 2017-11-1
.......


现在要列出一个公司下所有的职位,并且以添加时间倒序排列
要做成如下结构效果

m_id name jobName
2 小王有限公司 装配工,仓管员
......


最主要是要添加时间倒序为主导显示数据,添加时间越靠近当前时间的就排在最前面!!
求大侠帮忙
数据库是Sql2008


...全文
165 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
seven7769 2017-11-29
  • 打赏
  • 举报
回复
也就是说有一个公司有一个新的职位发布了,就把这个公司包括这个公司下面所有的职位的总的记录靠在最前面
seven7769 2017-11-29
  • 打赏
  • 举报
回复
引用 5 楼 RINK_1 的回复:
[quote=引用 4 楼 seven7769 的回复:] 这些是我的示例数据,我想要表达的是不是以公司名字为主导排序,而是以职位添加时间倒序为排序标准,我最早写的跟版主的是一模一样的写法,但我在公司里显示还是会以bsn_company_info为主导,我明天再去公司测试一下,现在在家里
你是要以职位添加时间来排序显示jobnmae这个字段的数据,还是以每个公司下各自最大的职位添加时间来对最后总的结果记录进行排序。[/quote] 以每个公司下各自最大的职位添加时间来对最后总的结果记录进行排序
seven7769 2017-11-29
  • 打赏
  • 举报
回复
引用 1 楼 RINK_1 的回复:


if OBJECT_ID(N'tempdb..#bsn_company_info') is not null
drop table #bsn_company_info
go

create table #bsn_company_info
(id int identity(1,1),
 mid varchar(10),
 name varchar(100),
 tel varchar(20))
 
insert into #bsn_company_info
select '2','小王有限公司','18658784412' union all
select '3','小张有限公司','15878954215'
go

if OBJECT_ID(N'tempdb..#bsn_company_job') is not null
drop table #bsn_company_job
go

create table #bsn_company_job
(id int identity(1,1),
 mid varchar(10),
 job_name nvarchar(20),
 add_time datetime)
 
insert into #bsn_company_job
select '2','装配工','2017-11-20' union all
select '2','仓管员','2017-11-21' union all
select '3','厨师','2017-10-25' union all
select '3','帮工','2017-11-01' 
go

select A.mid,A.name,B.job_name 
from #bsn_company_info A
join
(select mid,MAX(add_time) as add_time,
stuff((select ','+job_name from #bsn_company_job where mid=A.mid for XML path ('')),1,1,'') as job_name 
from #bsn_company_job A
group by mid) as B ON A.mid=B.mid
order by B.add_time desc
你的写法可以正确显示结果
RINK_1 2017-11-28
  • 打赏
  • 举报
回复
引用 4 楼 seven7769 的回复:
这些是我的示例数据,我想要表达的是不是以公司名字为主导排序,而是以职位添加时间倒序为排序标准,我最早写的跟版主的是一模一样的写法,但我在公司里显示还是会以bsn_company_info为主导,我明天再去公司测试一下,现在在家里
你是要以职位添加时间来排序显示jobnmae这个字段的数据,还是以每个公司下各自最大的职位添加时间来对最后总的结果记录进行排序。
seven7769 2017-11-28
  • 打赏
  • 举报
回复
这些是我的示例数据,我想要表达的是不是以公司名字为主导排序,而是以职位添加时间倒序为排序标准,我最早写的跟版主的是一模一样的写法,但我在公司里显示还是会以bsn_company_info为主导,我明天再去公司测试一下,现在在家里
seven7769 2017-11-28
  • 打赏
  • 举报
回复
引用 2 楼 yenange 的回复:
USE tempdb
GO
IF OBJECT_ID('bsn_company_info') IS NOT NULL DROP TABLE bsn_company_info
IF OBJECT_ID('bsn_company_job') IS NOT NULL DROP TABLE bsn_company_job
CREATE TABLE bsn_company_info(id INT,m_id INT,[name] NVARCHAR(20),tel VARCHAR(20))
CREATE TABLE bsn_company_job(id INT,m_id INT,[job_name] NVARCHAR(20),add_time DATETIME)
SET NOCOUNT ON
INSERT INTO bsn_company_info VALUES (1,2,'小王有限公司','18658784412')
INSERT INTO bsn_company_info VALUES (2,3,'小张有限公司','15878954215')
INSERT INTO bsn_company_job VALUES (1,2,'装配工','2017-11-20')
INSERT INTO bsn_company_job VALUES (2,2,'仓管员','2017-11-21')
INSERT INTO bsn_company_job VALUES (3,3,'厨师','2017-10-25')
INSERT INTO bsn_company_job VALUES (4,3,'帮工','2017-11-01')

SELECT a.m_id
,[name]
,STUFF(
	(
		SELECT ','+b.job_name FROM bsn_company_job AS b WHERE a.m_id=b.m_id
		ORDER BY b.add_time DESC	--这个是后添加的在前面,你希望反过来改成ASC就好
		FOR XML PATH('')
	),1,1,''
) AS jobName	
FROM bsn_company_info AS a
/*
m_id        name                       jobName
----------- -------------------- ---------------------
2           小王有限公司               仓管员,装配工
3           小张有限公司               帮工,厨师
*/
--你的结果数据和你描述的需求不一致,但也就只是个排序问题,有问题改排序就是了
我最早写的跟你的一样,但是排序好像不正确,就是主导的还是以bsn_company_info 默认的id从1,2,3这样排下来
吉普赛的歌 版主 2017-11-28
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('bsn_company_info') IS NOT NULL DROP TABLE bsn_company_info
IF OBJECT_ID('bsn_company_job') IS NOT NULL DROP TABLE bsn_company_job
CREATE TABLE bsn_company_info(id INT,m_id INT,[name] NVARCHAR(20),tel VARCHAR(20))
CREATE TABLE bsn_company_job(id INT,m_id INT,[job_name] NVARCHAR(20),add_time DATETIME)
SET NOCOUNT ON
INSERT INTO bsn_company_info VALUES (1,2,'小王有限公司','18658784412')
INSERT INTO bsn_company_info VALUES (2,3,'小张有限公司','15878954215')
INSERT INTO bsn_company_job VALUES (1,2,'装配工','2017-11-20')
INSERT INTO bsn_company_job VALUES (2,2,'仓管员','2017-11-21')
INSERT INTO bsn_company_job VALUES (3,3,'厨师','2017-10-25')
INSERT INTO bsn_company_job VALUES (4,3,'帮工','2017-11-01')

SELECT a.m_id
,[name]
,STUFF(
	(
		SELECT ','+b.job_name FROM bsn_company_job AS b WHERE a.m_id=b.m_id
		ORDER BY b.add_time DESC	--这个是后添加的在前面,你希望反过来改成ASC就好
		FOR XML PATH('')
	),1,1,''
) AS jobName	
FROM bsn_company_info AS a
/*
m_id        name                       jobName
----------- -------------------- ---------------------
2           小王有限公司               仓管员,装配工
3           小张有限公司               帮工,厨师
*/
--你的结果数据和你描述的需求不一致,但也就只是个排序问题,有问题改排序就是了
RINK_1 2017-11-28
  • 打赏
  • 举报
回复


if OBJECT_ID(N'tempdb..#bsn_company_info') is not null
drop table #bsn_company_info
go

create table #bsn_company_info
(id int identity(1,1),
 mid varchar(10),
 name varchar(100),
 tel varchar(20))
 
insert into #bsn_company_info
select '2','小王有限公司','18658784412' union all
select '3','小张有限公司','15878954215'
go

if OBJECT_ID(N'tempdb..#bsn_company_job') is not null
drop table #bsn_company_job
go

create table #bsn_company_job
(id int identity(1,1),
 mid varchar(10),
 job_name nvarchar(20),
 add_time datetime)
 
insert into #bsn_company_job
select '2','装配工','2017-11-20' union all
select '2','仓管员','2017-11-21' union all
select '3','厨师','2017-10-25' union all
select '3','帮工','2017-11-01' 
go

select A.mid,A.name,B.job_name 
from #bsn_company_info A
join
(select mid,MAX(add_time) as add_time,
stuff((select ','+job_name from #bsn_company_job where mid=A.mid for XML path ('')),1,1,'') as job_name 
from #bsn_company_job A
group by mid) as B ON A.mid=B.mid
order by B.add_time desc

34,577

社区成员

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

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