1

2 つのカテゴリから選択しようとしていますがfive、それぞれのグループ化によってカテゴリを交互に切り替えたいcategories.

ここにテーブルがあります

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

この結果を並べ替えるにはどうすればよいでしょうか。それを 5 つ、MainCategory 1次に 5 つ、MainCategory 2次に 5 つMainCategory 1、最後までそれぞれ 5 つ並べる必要があります。

MainCategory 1は よりもはるかに多くのアイテムを持っていますMainCategory 2。残りの部分MainCategory 1も下部にある必要があります。

4

1 に答える 1

2

このようなことを試すことができます。結果を SQL テーブルに挿入するときに、結果が希望どおりの順序になっていることを確認してください。クエリを 2 つの重複に分割し、結果をいくつかの一時テーブルに挿入します。次に、各 5 を 3 番目の結果テーブルに挿入して、結果を反復処理できます。

これは、私が利用できるデータベースで取ったアプローチの例です。

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 でサポートされていると思います。

于 2013-06-19T19:43:57.963 に答える