SELECT 测点信息.测点高程,垂线.径向位移 as '2016-11-29' FROM 垂线 inner JOIN 测点信息 on 垂线.测点编号=测点信息.测点编号 and 测点信息.测点位置='15号坝段' and 观测日期='2016-11-29' order by(select 测点信息.序号 from 测点信息 where 垂线.测点编号=测点信息.测点编号)
目前可以实现查询单点日期的查询,如右图。如果查询的时间点数不固定,查询结果如左图所示,如何查询?
and 观测日期 in ('2016-11-29','2016-11-30','2016-11-31')
时间放在listbox中,不是固定的,不一定是三个。
@babypurple: listbox是一张表么 如果是 and 观测日期 in (select 'datelist' from listbox)
@河畔: vb.net中的listbox控件
想办法把你listbox中选中的日期拼成in(这里)需要的样子。
建议不要使用in,哪怕你用多个and链接也好过使用in,一般in,like都能避免就避免,通常使用in,like都会进入table scan,尽量避免进行全表扫描,一旦进入全表扫描你的索引等,都将不起作用。
刚才图没刷出来,没注意,这个是典型的列转行,行转列的问题,如多对于不确定项,只能用动态方式实现。
下面链接是个传统例子,可以参考一下。
https://blog.csdn.net/xiaolinyouni/article/details/6950960
@yhdino: 静态查询确实没有问题。
但是我选择不固定的几个时间点来查询的话,多个时间点在程序里放在listbox中,如何进行。
@yhdino: 不用in用and??? 不要误导人家, in和and能一样吗? 要换只能用or好吧
SQL SERVER不清楚, mysql的in 会执行索引的
@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 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:
@babypurple: 是在抱歉,SQL server我太久没有用了,另外我这里也没有环境帮你测试,实在抱歉,不过有一点你要看看,用case when then是要进行数据转换的,所以那里最好是0不是null,我现在不清楚null是否也能max。
抱歉,sql server我实在帮不了太大的忙。