C# 如何显示双分组报表

C# 如何显示双分组报表,c#,crystal-reports,report,rdlc,C#,Crystal Reports,Report,Rdlc,假设我的SQL查询的结果是 Colour size week 1 week2 week 3 Black x 1 2 3 white xx 1 1 0 yellow large 2 1 0 我想从这样的查询生成一个报告 week 1 week 2 week 3 --

假设我的SQL查询的结果是

Colour   size    week 1  week2  week 3


Black      x       1      2       3

white      xx      1      1       0

yellow     large   2      1       0
我想从这样的查询生成一个报告

               week 1               week 2              week 3
    ----------------------------------------------------------------
           x   xx   large       x   xx   large        x   xx   large
   ----------------------       --------------        -------------                                            
    black  1     0    0         2    0    0           3    0     0 

    white  1     0    0         0    1    0           0    0     0

    yellow 2     0    0         0    2    0           0    0     0
我一直这么认为的可能性

  • 在RDLC报告中,在运行时更改报告XML。(由于大小和颜色是随机的,所以非常复杂)

  • 在Crystal report中,每周创建一个新报告,并在最后一个报告中将其显示为主报告中的子报告。(如果我必须创建15周或更长时间的报告,这是否有效?)

  • 为每周创建交叉选项卡,并将其与上面的报告一样对齐


  • 是否有人会建议我,以上述格式生成报告的最佳方式是什么。这是我缺少的一些东西。

    这可以通过分组来完成,但这需要很大的努力。假设weeks列是静态的,您基本上需要按每个数据列(weeks、size、color)分组,然后将页眉放在group Footer中,其中包含汇总或运行总计,将您的值带到您需要的位置

    第一部分故意含糊其辞,因为详细描述这一点会很复杂,所以我打算提出一个不同的解决方案。相反,您可以使用交叉表,但由于您的sql目前正在构建中,我相信每周都需要单独的交叉表

    我建议,这是基于一些假设,但我假设您有能力控制进入报表的sql查询。如果可以的话,我相信最好是重新格式化sql查询,让交叉表完成所有工作,而不是自己中断几周的工作。在我回答的第一部分中,我假设周是静态的,但我猜这不是最终的解决方案,在这种情况下,我认为如果您使用下面的数据输出,您应该能够创建一个交叉表,允许您将周显示为列

    Color    size    week    amt
    
    Black      x       1      1
    Black      x       2      2
    Black      x       3      3
    white      xx      1      1    
    white      xx      2      1
    white      xx      3      0
    yellow     large   1      2
    yellow     large   2      1
    yellow     large   3      0
    
    这是未经测试的,所以不要向我开枪,但我相信使用这种布局,您只需将weeks和size列设置为交叉选项卡columns部分的字段、交叉选项卡rows部分的color字段和Summated fields部分的amount

    一般来说,在我提出解决方案之前,我会尝试回答这里提出的问题,并理解在这种情况下我没有这样做,但如果您能够修改报表接受的sql查询,我相信这是一个更好的解决方案。如果您有任何问题,请告诉我。希望这有帮助