在一些情况下,要显示的数据比较多,且不属于同一条记录时,如果使用Formview等不是很方便,因为需要相应建多个Formview和数据源控件,繁琐且效率低下,一个变通的办法,是用一条嵌套查询,把需要的数据一次查到(当然这种变通仅限于返回单条的情况)。一个例子如下:
select (select Name from IIMSBasisInf where Duty='党总支书记') as Name1,
(select Name from IIMSBasisInf where Duty='党总支副书记') as Name2,
(select Name from IIMSBasisInf where Duty='部主任') as Name3,
(select top 1 Name from IIMSBasisInf where Duty='部副主任') as Name4,
(select top 1 Name from IIMSBasisInf where Duty='部副主任' and Name<>(select top 1 Name from IIMSBasisInf where Duty='部副主任')) as Name5,
(select top 1 Name from IIMSBasisInf where Duty='部副主任' and Name not in (select top 2 Name from IIMSBasisInf where Duty='部副主任')) as Name6,
(select Name from IIMSBasisInf where Duty='教研室主任' and Department='第一教研室') as Name7,
(select Name from IIMSBasisInf where Duty='教研室副主任' and Department='第一教研室') as Name8,
(select Name from IIMSBasisInf where Duty='教研室主任' and Department='第二教研室') as Name9,
(select Name from IIMSBasisInf where Duty='教研室副主任' and Department='第二教研室') as Name10,
(select Name from IIMSBasisInf where Duty='教研室主任' and Department='第三教研室') as Name11,
(select Name from IIMSBasisInf where Duty='教研室副主任' and Department='第三教研室') as Name12,
(select Name from IIMSBasisInf where Duty='中心主任') as Name13,
(select Name from IIMSBasisInf where Duty='副馆长') as Name14,
(select Name from IIMSBasisInf where Duty='办公室主任') as Name15
在基本信息表中,记录了所有老师的信息,现在一个页面上需要分别找出担任各个职务的人的人名,原始的方法当然是一次查找建一个数据源和一个Formview之类的控件,但是这样操作繁琐且效率低下。
现在的方法是使用嵌套,注意语句中的
(select top 1 Name from IIMSBasisInf where Duty='部副主任') as Name4,
(select top 1 Name from IIMSBasisInf where Duty='部副主任' and Name<>(select top 1 Name from IIMSBasisInf where Duty='部副主任')) as Name5,
(select top 1 Name from IIMSBasisInf where Duty='部副主任' and Name not in (select top 2 Name from IIMSBasisInf where Duty='部副主任')) as Name6,
这样写是因为部副主任有多人,不加top进行限定会返回多条记录,这在嵌套查询中会产生错误,所以使用了上面的办法,依次取出数据。
上面的sql语句本身没有什么技术深度,只是为了能用一次查询,得到全部结果,从而可以和Formview进行绑定。