求一个很绕人的sql语句,高手进哦
hot表:gsid不重复
id gsid
1 123
2 234
3 345
4 456
5 567
xxb表:gsid重复出现
id gsid mc bz
1 123 aaa
2 123 aaa
3 234 bbb
4 345 ccc
5 345 ccc
6 456 ddd
7 665 eee 1
8 666 fff
9 667 ggg 1
10 668 hhh 1
实现:提取5条记录,hot表中每个gsid只取一条最新记录,假如不足5条,则取xxb.bz=1的记录补足5条,总之保持5条记录,优先取hot表中gsid的
[解决办法]
楼主的需求真难猜啊
--执行测试语句
select top 5 id,gsid,mc,bz
from(
select distinct hot.id,xxb.gsid,mc,bz,1 as order_by
from hot
join xxb on xxb.gsid=hot.gsid
union
select top 5 id,gsid,mc,bz ,2 as order_by from xxb where bz = 1
)x
order by order_by,id
go
--删除测试环境
drop table hot,xxb
go
/*--测试结果
id gsid mc bz
----------- ----------- ---------- -----------
1 123 aaa NULL
2 234 bbb NULL
3 345 ccc NULL
4 456 ddd NULL
7 665 eee 1
(5 row(s) affected)
*/