【问题标题】:How to bulid a report with a total and breakout columns with SQL Server and Reporting Services如何使用 SQL Server 和 Reporting Services 构建包含总计和细分列的报表
【发布时间】:2013-01-08 18:06:01
【问题描述】:

我有一个数据结构,其中有两个表 Alpha 和 Beta,它们是一对多的。举个例子,假设表 alpha 有一个“状态”列,表 B 有“你喜欢的颜色”,你可以选择多个。我想构建一个包含这样列的报告:

STATE          TOTAL     RED     GREEN     BLUE
Alaska         5         1       3         1
Florida        2         2       2         0
New York       10        5       8         1

TOTAL 列将是 Alpha 中记录的计数,正如您所见,由于一对多的关系,颜色的总和可能超过计数。如果人们不喜欢颜色,我想它可能会更少。

您将如何构建这样的报告。我将在 .NET 中使用 SQL Server 和 Reporting Services,因此它可能是一个复杂的查询,我只是转储到数据表报告中,也可能是一个不太复杂的查询,由报告完成一些计数和总计。我只是真的不知道解决这个问题的最佳方法。

【问题讨论】:

  • 颜色和设计时间是否已知?问题的答案会影响可能的解决方案。
  • 否,它们可以在部署后更改。颜色实际上是用户可配置的。

标签: asp.net sql-server reporting-services


【解决方案1】:

由于您不知道哪些颜色将成为列,您应该使用Matrix Control

您需要设置查询

SELECT 
    a.State,
    b.ColorName,
    COUNT(b.ColorID) ColorCount
FROM
    alpha a
    LEFT JOIN beta b
    ON a.id = b.a_id
GROUP BY 
    a.State,
    b.ColorName

只需拖动行的状态、列的颜色和数据的 ColorCount(Count(ColorID) 将显示在数据字段中)

注意:如果您希望 0 值正确显示,则需要 LEFT JOIN 和 Count(ColorID) 而不是 Count(*)。

如果你知道颜色,你可以使用 PIVOT 或 sum case 技术

SELECT state SUM(CASE WHEN Color = 'RED' THEN 1 ELSE 0 END) as Red, ...

【讨论】:

  • 这个方法的查询如何工作?我只会选择 Alpha 和内部加入 Beta?
  • @William 因为你实际上问不,它需要是一个 LEFT JOIN 因为你期待零。见SQL COUNT(*) returning the wrong answer
  • 我明白了。当我再次从事该项目时,我会尝试一下。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多