0

Book MasterCategory MasterSubcategory Masterの3 つのテーブルがあります。私のBook Masterテーブルでは、列にはCategory Masterの列CategoryNameからの値があります。Book Masterの列には、Subcategory Masterからの列の値があります。IDSubcategoryNameID

3 つのテーブルのテーブル構造:

ブックマスター

Oid             uniqueidentifier,
BookName        nvarchar(100),
CategoryName    uniqueidentifier,
SubCategoryName uniqueidentifier

カテゴリーマスター

Oid             uniqueidentifier,
CategoryName    nvarchar(100)

サブカテゴリマスター

Oid             uniqueidentifier,
CategoryName    uniqueidentifier,
SubCategoryName nvarchar(100)

私は、書籍の各カテゴリから上位 5 冊の本を表示する必要があるという点で、1 つの Windows アプリケーションで作業しています。

select BM.BookName ,BM.BookImage,CM.CategoryName,SCM.SubCategoryName
from BookMaster BM,CategoryMaster CM,SubCategoryMaster SCM 
where BM.CategoryName=CM.Oid and BM.SubCategoryName=SCM.Oid 
order by CM.CategoryName

このクエリでは、10 件すべてのレコードが得られます。ただし、テーブル内のレコードが少ない場合、このクエリは問題ありません。しかし、記録がどんどん増えていくと、すべての記録を表示することは難しくなります。このため、各カテゴリの上位 5 冊を表示したいと思います。

group by 句で試しました

select top 5 BM.BookName ,BM.BookImage,CM.CategoryName,SCM.SubCategoryName
from BookMaster BM,CategoryMaster CM,SubCategoryMaster SCM 
where BM.CategoryName=CM.Oid and BM.SubCategoryName=SCM.Oid
group by CM.CategoryName

しかし、それは私に言うエラーを与えます、

列 'BookMaster.BookName' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。

これに対する解決策を提案してください。前もって感謝します

4

3 に答える 3

0

CategoryName を受け取り、そのカテゴリの上位 5 冊の本をテーブルとして返す関数を作成します。次に、T SQL Apply を使用して目的の結果を出力します。

詳細 http://msdn.microsoft.com/en-us/library/ms175156%28v=sql.105%29.aspx

于 2013-07-20T10:28:44.227 に答える
0

これを試して:

WITH CategoryCTE AS (
    SELECT 
        BookName,
        ROW_NUMBER() OVER (
            PARTITION BY CategoryName
            ORDER BY CategoryName DESC
        ) AS CTE_Order
    FROM BookMaster
)
SELECT bm.BookName, cm.CategoryName, scm.SubCategoryName
FROM 
    CategoryCTE 
    INNER JOIN BookMaster bm ON CategoryCTE.BookName = bm.BookName
    INNER JOIN CategoryMaster cm ON bm.CategoryName = cm.Oid
    INNER JOIN SubCategoryMaster scm ON bm.SubCategoryName = scm.Oid
WHERE CategoryCTE.CTE_Order < 6
GROUP BY cm.CategoryName, scm.SubCategoryName, bm.BookName
于 2013-07-20T10:47:55.620 に答える