首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

常见SQL有关问题,请大大们帮忙

2012-03-22 
常见SQL问题,急请大大们帮忙!各位新年好!请帮忙看看:有视图V,含如下记录(为清晰起见,故分为5组):SQL codeA

常见SQL问题,急请大大们帮忙!
各位新年好!请帮忙看看:
有视图V,含如下记录(为清晰起见,故分为5组):

SQL code
Aid   Aname   AE     AR1    AN1    ae1    ar101    AN1    ae1    ar121    AN1    ae1    ar131    AN1    ae1    ar142    AN2    ae2    ar202    AN2    ae2    ar212    AN2    ae2    ar222    AN2    ae2    NULL2    AN2    ae3    NULL2    AN2    ae3    NULL2    AN2    ae3    ar232    AN2    ae3    ar242    AN2    ae4    ar252    AN2    ae4    ar262    AN2    ae4    NULL2    AN2    ae4    ar272    AN2    ae5    NULL2    AN2    ae5    NULL2    AN2    ae5    NULL2    AN2    ae5    NULL

想要查询结果(需要写的SQL:只返回不同Aid的第一行数据即可,具体要求请见下面说明):
SQL code
Aid   Aname   AE    AR1    AN1    ae1    ar102    AN2    ae2    ar20

说明:视图V是已经创建的中间数据,AE和AR字段(在实际中均对应多列,现把它们各抽象为一组列),一个AE对应4个AR, 同一个Aid最多有4个AE (最少1个),则AR最多有(4x4)16个(最少4个) ,实际业务中动态查询的情况:
1.当AE的个数等于1时,则对应的(4个) 任意一个AR值都有可能为空.(为空的用0代替);
2.当AE的个数大于1时,则对应的每组中的任意一个AR值都有可能为空.(为空的用0代替)


备注: 1.每组AE之间应该用AND连接吧(因为对应的实际业务数据都为同一个Aid的属性)
  2. AE与本组的AR之间也应该用AND连接吧( 原因同上)
  3. AE和AR是在程序中要输入查询的参数(即可输入4个AE值,16个AR值进行查询).








[解决办法]
探讨

SQL code

select * from [tb] t where not exists(select 1 from [tb] where [Aid]=t.[Aid]and [AR]<t.[AR])
and[AR] is not null
----------------结果----------------------------
/*
Aid Aname AE AR……

[解决办法]
探讨

谢谢大家的回复: 回1楼:不只是返回结果哦,您的SQL无法去和实际的字段去匹配查询哦;
回4楼:可以Aid为排序,且在实际中每组AE中的每个AR值都允许相同,不同AE组的AR值也允许相同(虽然极少出现这种情况),这点很重要哦!(不是以AR或AE为排序的)

[解决办法]
select t.* from tb t where ar is not null and not exists (select 1 from tb where ar is not null and aid = t.aid and aname = t.aname and (ae < t.ae or (ae = t.ar and ar < t.ar)))

热点排行