日期:2014-05-19  浏览次数:20416 次

求解一个排列问题~
如果有两个表:
tabel1:
id   userid   companyname   address   classid   ischecked     registerdate
1         101         东莞易全       东莞市       2                 true           2007-1-2
2         103         重庆建宏       重庆市       3                 true           2007-1-3
3         102         其它公司       其它城市     2               true           2007-1-1
..................
table2:
id   userid     wareid       productname     price       mark
1         101         2                 网卡                   100         说明
2         101         3                 路由器               200         说明
2         103         4                 交换机               200         说明
4         102         3                 集线器               199         说明
........................

现在我的问题是先把两个表select...inner   join,然后让相同的公司产品只显示一条排列在最前面(要查询完把有公司的产品之后),其它的产品再显示(要显示完所有公司的产品)~

我现在只能实现让相同公司的产品用聚合只显示一条排列最前面,而不能实现让相同公司的其它产品显示在其后面~
请问各位老大这个sql怎么实现?


------解决方案--------------------
--改了一下, 你看看吧

create table T1(id int, userid varchar(10), companyname varchar(10), address varchar(10), classid int, ischecked varchar(10), registerdate datetime)
insert T1 select 1, '101 ', '东莞易全 ', '东莞市 ', 2, 'true ', '2007-1-2 '
union all select 2, '103 ', '重庆建宏 ', '重庆市 ', 3, 'true ', '2007-1-3 '
union all select 3, '102 ', '其它公司 ', '其它城市 ', 2, 'true ', '2007-1-1 '

create table T2(id int, userid varchar(10), wareid int, productname varchar(10), price int, mark varchar(10))
insert T2 select 1, '101 ', 2, '网卡 ', 100, '说明 '
union all select 2, '101 ', 3, '路由器 ', 200, '说明 '
union all select 3, '103 ', 4, '交换机 ', 200, '说明 '
union all select 4, '102 ', 3, '集线器 ', 199, '说明 '

select *
from T1 as tmpA
inner join T2 as tmpB on tmpA.userid=tmpB.userid
order by
(
case when
not exists (select 1 from T2 where userid=tmpB.userid and id <tmpB.id) then -1
else tmpB.id
end
)