2013-06-19 1 views
1

Je suis en train de choisir parmi deux catégories, mais je veux d'alterner entre les catégories en regroupant five de chaque categories.ordre de 5 lignes consécutives en alternance entre les résultats

Voici les tables

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 

Comment puis-je trier ce résultat qu'il doit être ordonné par 5 de MainCategory 1 puis 5 de MainCategory 2 puis 5 de MainCategory 1 et continuer 5 de chacun jusqu'à la fin.

MainCategory 1 a beaucoup plus d'articles que MainCategory 2. le reste du MainCategory 1 devrait également être en bas.

+0

Montrez ce que vous avez essayé jusqu'à présent? Ce serait bien si vous pouvez fournir la structure de la table ainsi –

+0

Merci @Praveen Ajout de la requête SQL. – monsey11

+0

Quelle version du serveur SQL? ROW_NUMBER est la manière évidente de faire ceci ([comme @bummi said] (http://stackoverflow.com/a/17183964/132382)), mais toutes les versions ne le supportent pas. – pilcrow

Répondre

2

Vous pourriez essayer quelque chose comme ça. Assurez-vous simplement que vos résultats sont ordonnés comme vous le souhaitez lorsque vous les insérez dans les tables SQL. Divisez la requête en 2 doublons qui insèrent les résultats dans certaines tables temporaires. Vous pouvez ensuite parcourir les résultats en insérant chaque 5 dans une troisième table de résultats.

Voici un exemple de l'approche que j'ai prise avec un db que j'avais à ma disposition.

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 

Je crois que tout est pris en charge par SQL 2000.

Questions connexes