首页 新闻 搜索 专区 学院

如何查询多个不固定日期点的记录?

0
悬赏园豆:100 [待解决问题]
复制代码
SELECT 测点信息.测点高程,垂线.径向位移 as '2016-11-29' FROM  垂线 inner JOIN  测点信息 on  垂线.测点编号=测点信息.测点编号 and 测点信息.测点位置='15号坝段' and 观测日期='2016-11-29'  order by(select 测点信息.序号 from 测点信息 where 垂线.测点编号=测点信息.测点编号)
复制代码

 目前可以实现查询单点日期的查询,如右图。如果查询的时间点数不固定,查询结果如左图所示,如何查询?

babypurple的主页 babypurple | 初学一级 | 园豆:18
提问于:2018-06-05 16:48
< >
分享
所有回答(3)
0

and 观测日期 in ('2016-11-29','2016-11-30','2016-11-31')

河畔 | 园豆:723 (小虾三级) | 2018-06-05 16:56

时间放在listbox中,不是固定的,不一定是三个。

支持(0) 反对(0) babypurple | 园豆:18 (初学一级) | 2018-06-05 17:09

@babypurple: listbox是一张表么  如果是  and 观测日期 in (select 'datelist' from listbox)

支持(0) 反对(0) 河畔 | 园豆:723 (小虾三级) | 2018-06-05 17:14

@河畔: vb.net中的listbox控件

支持(0) 反对(0) babypurple | 园豆:18 (初学一级) | 2018-06-05 17:16
0

想办法把你listbox中选中的日期拼成in(这里)需要的样子。

西漠以西 | 园豆:1670 (小虾三级) | 2018-06-05 17:19
0

建议不要使用in,哪怕你用多个and链接也好过使用in,一般in,like都能避免就避免,通常使用in,like都会进入table scan,尽量避免进行全表扫描,一旦进入全表扫描你的索引等,都将不起作用。

yhdino | 园豆:701 (小虾三级) | 2018-06-05 17:31

刚才图没刷出来,没注意,这个是典型的列转行,行转列的问题,如多对于不确定项,只能用动态方式实现。

下面链接是个传统例子,可以参考一下。

https://blog.csdn.net/xiaolinyouni/article/details/6950960

支持(1) 反对(0) yhdino | 园豆:701 (小虾三级) | 2018-06-05 18:12

@yhdino: 静态查询确实没有问题。

但是我选择不固定的几个时间点来查询的话,多个时间点在程序里放在listbox中,如何进行。

支持(0) 反对(0) babypurple | 园豆:18 (初学一级) | 2018-06-06 07:55

@yhdino: 不用in用and??? 不要误导人家, in和and能一样吗? 要换只能用or好吧
SQL SERVER不清楚, mysql的in 会执行索引的

支持(0) 反对(0) 、熙和 | 园豆:1486 (小虾三级) | 2018-06-06 09:19

@babypurple: 确实是or不是and,另外链接中的例子里第二个例子就已经写了。

--动态SQL,指subject不止语文、数学、物理这三门课程。

declare @sql varchar(8000) set @sql = 'select Name as ' + '姓名' select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']' from (select distinct Subject from tb) as a set @sql = @sql + ' from tb group by name'

exec(@sql)

原理是一样的,使用存储过程是一种办法;还有就是后端拼写sql语句再执行,两种办法都可以。

上面的例子是存储过程,只不过他获取subject是通过select distinct subject from tb来的,你可以小改一下,看看能否从参数中遍历,比如传数组,或者字串,然后遍历拼接中间部分。不过这一块需要稍微研究一下。

另外sql server我已经10多年没用了,具体的都忘了,你可能要多查一些资料。希望对你有帮助。

支持(1) 反对(0) yhdino | 园豆:701 (小虾三级) | 2018-06-06 13:23
1 declare @sql varchar(8000)
2 declare @array nvarchar(1000)
3 set @array = '''2016-11-17'',''2016-11-29'',''2018-5-29'''
4 set @sql = 'select 测点编号 '
5 select @sql = @sql + ' , max(case 观测日期 when  (' + @array + ') then 径向位移 else null end) [' + @array + ']'
6 --from (select    观测日期 from 垂线   where 观测日期 in  (' + @array + ')) as a
7 set @sql = @sql + ' from 垂线   inner join 测点信息  on  测点信息.测点编号=垂线.测点编号 and 测点位置="15号坝段" group by 测点编号 '
8 exec(@sql) 

提示:消息 102,级别 15,状态 1,第 1 行 “,”附近有语法错误。

请问这么写有什么问题?不好意思,我是刚开始接触sql。

@yhdino: 

支持(0) 反对(0) babypurple | 园豆:18 (初学一级) | 2018-06-06 17:02

@babypurple: 是在抱歉,SQL server我太久没有用了,另外我这里也没有环境帮你测试,实在抱歉,不过有一点你要看看,用case when then是要进行数据转换的,所以那里最好是0不是null,我现在不清楚null是否也能max。

抱歉,sql server我实在帮不了太大的忙。

支持(0) 反对(0) yhdino | 园豆:701 (小虾三级) | 2018-06-07 09:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册