常见SQL有关问题,请大大们帮忙
常见SQL问题,急请大大们帮忙!各位新年好!请帮忙看看:有视图V,含如下记录(为清晰起见,故分为5组):SQL codeA
常见SQL问题,急请大大们帮忙! 各位新年好!请帮忙看看: 有视图V,含如下记录(为清晰起见,故分为5组):
SQL codeAid 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 codeAid 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)))