2013-06-19 19 views
1

我想从两个类别中进行选择,但我想类别之间交替之间交替连续的行是表订购5点通过分组的每个<code>categories.</code></p> <p>这里<code>five</code>结果

SELECT MC.main_category_id, MC.main_category_name, MC.order_by_num AS MC_Order, 
C.category_id, C.category_name, C.order_by_num AS C_Order, C.gift, I.item_id,           I.model_num, I.item_title, B.brand_name, I.price, I.suggested_price, i.description 
    FROM dbo.tblMainCategories AS MC 
    INNER JOIN dbo.tblCategories AS C ON MC.main_category_id = C.main_category_id 
    INNER JOIN dbo.tblItemCategories AS IC ON MC.main_category_id = IC.main_category_id 
    AND C.category_id = IC.category_id 
    INNER JOIN dbo.tblItems AS I ON IC.ic_item_id = I.item_id 
    INNER JOIN dbo.tblBrands AS B ON I.brand_id = B.brand_id 
WHERE (MC.store_id = 14) AND (IC.store_id = 14) AND I.isActive = 1 
And MC.main_category_id in (1,2) 
ORDER BY MC.order_by_num, C.order_by_num, I.order_by_num,I.price 

如何我可以对这个结果进行排序,它应该按照MainCategory 1中的5个,然后MainCategory 2中的5个,然后是MainCategory 1中的5个进行排序,并且继续每个中的5个直到结束。

MainCategory 1MainCategory 2有更多的项目。 MainCategory 1的其余部分也应该位于底部。

+0

告诉你试过什么这么远吗?如果你还可以提供表结构,那将是很好的 –

+0

谢谢@Praveen增加了SQL查询。 – monsey11

+0

什么版本的SQL服务器? ROW_NUMBER是这样做的显而易见的方式([如@bummi说的](http://stackoverflow.com/a/17183964/132382)),但并非所有版本都支持它。 – pilcrow

回答

2

你可以尝试这样的事情。只要确保您的结果按照您希望的方式排列,并将它们插入到SQL表中即可。将查询分解成2个副本,将结果插入某些临时表中。然后,您可以遍历将每个5插入到第三个结果表中的结果。

下面是我用db提供给我的方法的一个例子。

create table #result(AccountID int, AccountTypeID int, AccountName varchar(128)) 


select AccountID, ab.AccountTypeID, AccountName INTO #Temp from AccountBase ab 
join AccountType at on ab.AccountTypeId = at.AccountTypeId 
where ab.AccountTypeId in (1) 
order by AccountName 

select AccountID, ab.AccountTypeID, AccountName INTO #Temp2 from AccountBase ab 
join AccountType at on ab.AccountTypeId = at.AccountTypeId 
where ab.AccountTypeId in (2) 
order by AccountName 



While ((select count(*) from #Temp) > 0 or (select count(*) from #Temp2) > 0) 
begin 

    If (select count(*) from #Temp) > 0 
     Begin 
      insert into #result select Top(5) * from #Temp 
      delete top(5) from #Temp 
     End 
    If (select count(*) from #Temp2) > 0 
     Begin 
      insert into #result select Top(5) * from #Temp2 
      delete top(5) from #Temp2 
     End 
End 

select * from #result 

drop table #Temp 
drop table #Temp2 
drop table #result 

我相信一切是通过SQL 2000支持