2013-07-21 3 views
3

Я работаю над одним приложением Windows на C#. В этом есть одна форма, в которой я хочу отображать изображения категории мудрой книги в панели макета таблицы. И для каждой категории я хочу отображать 5 книжных изображений.Как отображать данные в панели таблицы динамически

запроса я использую, чтобы получить категорию мудрой книги является

WITH CategoryCTE AS (
    SELECT 
     BookName, 
     ROW_NUMBER() OVER (
      PARTITION BY CategoryName 
      ORDER BY CategoryName DESC 
     ) AS CTE_Order 
    FROM BookMaster 
) 
SELECT bm.BookName,bm.BookImage, 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,bm.BookImage 

этого запрос дает мне надлежащий выход т.е. он дает мне 5 книг из каждой категории. Но проблема в том, что я хочу отображать книжные образы в панели стола. Ierow 1 будет иметь 5 книжных изображений категории 1, строка 2 имеет книжные образы категории 2 и т. Д. Теперь у меня есть 4 категории книг в моей базе данных. Это означает, что строки панели таблицы таблицы зависят от таблицы категорий в базе данных, а столбец таблиц фиксирован, то есть первый столбец - это имя категории, а в другом столбце 5 - книжные образы.

Надеюсь, я правильно объяснил свой вопрос. Пожалуйста, предложите мне какое-либо решение для этого. благодарит заранее.

+0

можно добавить пример результирующего набора вы хотите, чтобы произвести в SQL? (и в идеале sqlfiddle с данными и структурой :)) – jazzytomato

+0

запрос, который я дал выше, дает результат, такой как –

+0

выше запроса, дает мне правильный вывод, моя проблема заключается в том, как отображать его в макете панели таблицы –

ответ

1

Если вы хотите, чтобы результат выглядеть примерно так:

CategoryName Book1   Book2    Book3   Book4   Book5 
------------ ----------- --------------- -------------- ------------- ------------ 
Cat1   Image#6.jpg Image#61.jpg  Image#62.jpg Image#63.jpg Image#64.jpg 
Cat2   Image#5.jpg Image#51316.jpg Image#5136.jpg Image#516.jpg Image#56.jpg 

Следующий запрос должен это сделать:

WITH CategoryCTE AS (
    SELECT 
     BookName, 
     ROW_NUMBER() OVER (
      PARTITION BY CategoryName 
      ORDER BY CategoryName DESC, BookName 
     ) AS CTE_Order 
    FROM BookMaster  
) 

SELECT CategoryName, [1] AS Book1, [2] AS Book2, [3] AS Book3, [4] AS Book4, [5] AS Book5 
FROM 
(SELECT bm.BookImage, cm.CategoryName, c.CTE_Order FROM 
    CategoryCTE c 
    INNER JOIN BookMaster bm ON c.BookName = bm.BookName 
    INNER JOIN CategoryMaster cm ON bm.CategoryName = cm.Oid 
    INNER JOIN SubCategoryMaster scm ON bm.SubCategoryName = scm.Oid 
WHERE c.CTE_Order < 6 
GROUP BY cm.CategoryName, bm.BookImage, c.CTE_Order 
) Sub 
PIVOT (MAX(BookImage) FOR CTE_Order IN ([1],[2],[3], [4],[5])) AS PivotTable 
Смежные вопросы