sql-server - 如何在表格面板中动态显示数据

标签 sql-server

我正在使用 C# 开发一个 Windows 应用程序。在这种情况下,我想在表格布局面板中显示类别明智的书籍图像。对于每个类别,我想显示 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 本书。 但问题是,我想在表格面板中显示书籍图像,即第 1 行将有 5 个类别 1 的书籍图像,第 2 行有类别 2 的书籍图像等等。现在我的数据库中有 4 个书籍类别。那表示表格布局面板的行取决于数据库中的类别表,表格的列是固定的,即第一列是类别名称,其他 5 列是书籍图片。

我希望我已经正确解释了我的问题。请为此提出任何解决方案。 提前致谢。

最佳答案

如果您希望结果看起来像这样:

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

关于sql-server - 如何在表格面板中动态显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17771741/

相关文章:

sql - 内连接转换失败

sql-server - SQL - 在 SELECT 语句和 WHERE 子句中使用变量作为列

c# - 如何处理 .NET 中可选字段的外键

C# 本地 SQL 行返回 if 语句

c# - 尝试连接远程服务器时 SSIS 执行失败

c# - 访问 MDF 文件线程安全

sql - 分页 UNION ALL 结果 - 最佳性能

sql-server - SQL Server 相当于 Oracle LEAST?

具有 "bad"日期条件的 Sql Server SELECT 语句

c# - connection.open 挂起/卡住。我的连接字符串有什么问题?