按年和当前年对比 查出多条数据

w87875251l 2018-01-24 11:47:51
测试数据

create table #test(
username nvarchar(100),
companyname nvarchar(200),
jointime datetime2(7)
)

insert into #test(username, companyname, jointime)
select 'test1','测试1', '2018-01-03 00:00:00.0000000' union
select 'test2','测试2', '2017-01-03 00:00:00.0000000' union
select 'test3','测试3', '2016-01-03 00:00:00.0000000'


test1 的入住时间为 2018-01-03 和当年(2018)比 泽产生1条数据 test1 测试1 2018
test2 的入驻时间为 2017-01-03 和当年 比 查询2条数据 test2 测试2 2018
test2 测试2 2017
test3 查询出三条

写一个sql 如何查询出6条数据
...全文
431 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
浊酒伴清风 2018-01-24
  • 打赏
  • 举报
回复
DECLARE @str NVARCHAR(MAX) = ''; SELECT @str += ' union all select * from ' + RTRIM(name) FROM sys.tables WHERE type = 'U' AND name LIKE 'work%'; SET @str = STUFF(@str, 1, 10, ''); EXEC(@str);
听雨停了 2018-01-24
  • 打赏
  • 举报
回复
引用 11 楼 w87875251l 的回复:
正式数据库数据
admin 天津奥斯顿科技有限公司 2018-01-03 00:00:00.0000000
test1 天津重工 2017-01-06 00:00:00.0000000
test2 我是第而非大使馆 2018-01-06 00:00:00.0000000
f0001 企业一 2011-08-18 00:00:00.0000000
2018001 天津汇海科技 2018-01-19 00:00:00.0000000
test5 1112 2018-01-20 00:00:00.0000000
f0002 f0002 2013-02-21 00:00:00.0000000
test6 11212 2018-01-24 00:00:00.0000000

想要的结果
admin 天津奥斯顿科技有限公司 2018
test1 天津重工 2018
test1 天津重工 2017
test2 我是第而非大使馆 2018
f0001 企业一 2018
f0001 企业一 2017
f0001 企业一 2016
f0001 企业一 2015
f0001 企业一 2014
f0001 企业一 2013
f0001 企业一 2012
f0001 企业一 2011
下面以此类推


Insert into #test
SELECT 'admin','天津奥斯顿科技有限公司','2018-01-03 00:00:00.0000000' union all
select N'test1',N'天津重工','2017-01-06 00:00:00.0000000' union all
select N'test2',N'我是第而非大使馆','2018-01-06 00:00:00.0000000' union all
select N'f0001',N'企业一','2011-08-18 00:00:00.0000000' union all
select N'2018001',N'天津汇海科技','2018-01-19 00:00:00.0000000' union all
select N'test5',N'1112','2018-01-20 00:00:00.0000000' union all
select N'f0002',N'f0002','2013-02-21 00:00:00.0000000' union all
select N'test6',N'11212','2018-01-24 00:00:00.0000000'
GO
--测试数据结束

SELECT a.username,
a.companyname,
YEAR(a.jointime) + b.number AS jointime
FROM #test a,
[master].dbo.spt_values b
WHERE b.[type] = 'p'
AND YEAR(a.jointime) + b.number <= YEAR(GETDATE())


这样就满足你的需求了
w87875251l 2018-01-24
  • 打赏
  • 举报
回复
正式数据库数据 admin 天津奥斯顿科技有限公司 2018-01-03 00:00:00.0000000 test1 天津重工 2017-01-06 00:00:00.0000000 test2 我是第而非大使馆 2018-01-06 00:00:00.0000000 f0001 企业一 2011-08-18 00:00:00.0000000 2018001 天津汇海科技 2018-01-19 00:00:00.0000000 test5 1112 2018-01-20 00:00:00.0000000 f0002 f0002 2013-02-21 00:00:00.0000000 test6 11212 2018-01-24 00:00:00.0000000 想要的结果 admin 天津奥斯顿科技有限公司 2018 test1 天津重工 2018 test1 天津重工 2017 test2 我是第而非大使馆 2018 f0001 企业一 2018 f0001 企业一 2017 f0001 企业一 2016 f0001 企业一 2015 f0001 企业一 2014 f0001 企业一 2013 f0001 企业一 2012 f0001 企业一 2011 下面以此类推
听雨停了 2018-01-24
  • 打赏
  • 举报
回复
引用 8 楼 w87875251l 的回复:
根本不是我要的效果呢。。。。。。
就你上面这些数据,你要得出什么效果,给出来看看,可能我们理解错了
听雨停了 2018-01-24
  • 打赏
  • 举报
回复
引用 3 楼 w87875251l 的回复:
第三个字段 我要查询出年 test2 测试2 2018 test2 测试2 2017
把YEAR(a.jointime)里面的a改成b就可以啦
w87875251l 2018-01-24
  • 打赏
  • 举报
回复
根本不是我要的效果呢。。。。。。
w87875251l 2018-01-24
  • 打赏
  • 举报
回复
正式数据库数据 admin 天津奥斯顿科技有限公司 2018-01-03 00:00:00.0000000 test1 天津重工 2017-01-06 00:00:00.0000000 test2 我是第而非大使馆 2018-01-06 00:00:00.0000000 f0001 企业一 2011-08-18 00:00:00.0000000 2018001 天津汇海科技 2018-01-19 00:00:00.0000000 test5 1112 2018-01-20 00:00:00.0000000 f0002 f0002 2013-02-21 00:00:00.0000000 test6 11212 2018-01-24 00:00:00.0000000 用这个 sql 查询出的数据 2018001 天津汇海科技 2018 2018001 天津汇海科技 2018 2018001 天津汇海科技 2018 admin 天津奥斯顿科技有限公司 2018 admin 天津奥斯顿科技有限公司 2018 admin 天津奥斯顿科技有限公司 2018 admin 天津奥斯顿科技有限公司 2018 admin 天津奥斯顿科技有限公司 2018 f0001 企业一 2018 f0001 企业一 2017 f0001 企业一 2018 f0001 企业一 2011 f0001 企业一 2018 f0001 企业一 2018 f0001 企业一 2013 f0001 企业一 2018 f0002 f0002 2018 f0002 f0002 2017 f0002 f0002 2018 f0002 f0002 2018 f0002 f0002 2018 f0002 f0002 2013 f0002 f0002 2018 test1 天津重工 2018 test1 天津重工 2017 test1 天津重工 2018 test1 天津重工 2018 test1 天津重工 2018 test1 天津重工 2018 test2 我是第而非大使馆 2018 test2 我是第而非大使馆 2018 test2 我是第而非大使馆 2018 test2 我是第而非大使馆 2018 test5 1112 2018 test5 1112 2018 test6 11212 2018
w87875251l 2018-01-24
  • 打赏
  • 举报
回复
正式数据库数据 admin 天津奥斯顿科技有限公司 2018-01-03 00:00:00.0000000 test1 天津重工 2017-01-06 00:00:00.0000000 test2 我是第而非大使馆 2018-01-06 00:00:00.0000000 f0001 企业一 2011-08-18 00:00:00.0000000 2018001 天津汇海科技 2018-01-19 00:00:00.0000000 test5 1112 2018-01-20 00:00:00.0000000 f0002 f0002 2013-02-21 00:00:00.0000000 test6 11212 2018-01-24 00:00:00.0000000
二月十六 2018-01-24
  • 打赏
  • 举报
回复
SELECT  a.username ,
a.companyname ,
YEAR(b.jointime) AS jointime
FROM #test a
JOIN #test b ON a.jointime <= b.jointime
ORDER BY a.username


w87875251l 2018-01-24
  • 打赏
  • 举报
回复
第三个 字段 year 是不同的
w87875251l 2018-01-24
  • 打赏
  • 举报
回复
第三个字段 我要查询出年 test2 测试2 2018 test2 测试2 2017
听雨停了 2018-01-24
  • 打赏
  • 举报
回复

create table #test(
username nvarchar(100),
companyname nvarchar(200),
jointime datetime2(7)
)
insert into #test(username, companyname, jointime)
select 'test1','测试1', '2018-01-03 00:00:00.0000000' union
select 'test2','测试2', '2017-01-03 00:00:00.0000000' union
select 'test3','测试3', '2016-01-03 00:00:00.0000000'
--测试数据结束

SELECT a.username,a.companyname,YEAR(a.jointime) AS jointime
FROM #test a
INNER JOIN #test b ON a.jointime<=b.jointime
ORDER BY username

二月十六 2018-01-24
  • 打赏
  • 举报
回复
SELECT b.* FROM #test a JOIN #test b ON a.jointime<=b.jointime


27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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