常见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值进行查询).
[解决办法]
[解决办法]
[解决办法]
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)))