【问题标题】:SQL Query to get Matrix reporting获取矩阵报告的 SQL 查询
【发布时间】:2010-11-17 05:18:08
【问题描述】:

我的“FeedbackSummary”表结构是

GivenBy varchar(50)
GivenTo varchar(50)
Points  decimal(15, 2)

样本数据

Alice   Janet   4.50
Alice   Bruce   3.50
Bruce   Alice   2.87
Bruce   Janet   4.75
Janet   Alice   5.45
Janet   Bruce   3.78

我想要达到的目标

GivenBy_GivenTo Alice   Bruce   Janet
Alice           NULL    3.50    4.50    
Bruce           2.87    NULL    4.75
Janet           5.45    3.78    NULL

平台:SQL Server 2005 和 2008

如何使用 Pivot 或任何其他技术来做到这一点。 这可以使用 SQL Reporting Services 轻松实现吗?

提前致谢。

【问题讨论】:

  • 我只是在其中添加了 tsql 和 ssrs 标签,因为这是一个真正关系到您是在客户端 (SSRS) 还是在服务器 (T-SQL) 上处理这些数据的问题
  • (动态旋转的正确答案是“客户”)

标签: sql sql-server-2005 tsql reporting-services pivot


【解决方案1】:

最好是使用 SSRS。在那里放置一个矩阵,行上一列,列上一列。您可以在查询中进行透视(PIVOT 选项),但这不允许报告的灵活性。

罗伯

【讨论】:

  • 是的。我用带有矩阵的 SSRS 测试了这些数据。该报告非常完美,甚至允许进行一些自定义。谢谢
【解决方案2】:
  SELECT t.givenby,
         SUM(CASE WHEN t.givento = 'Alice' THEN t.points ELSE NULL END) 'Alice',
         SUM(CASE WHEN t.givento = 'Bruce' THEN t.points ELSE NULL END) 'Bruce',
         SUM(CASE WHEN t.givento = 'Janet' THEN t.points ELSE NULL END) 'Janet'
    FROM TABLE t
GROUP BY t.givenby

【讨论】:

  • 关闭,但您需要聚合它,将 SUM() 放在每个 CASE 语句周围,并按 GivenBy 分组。但这根本不适合 SSRS,因为 SSRS 不喜欢动态出现的列。
  • 更正了缺失的聚合调用。如果需要,为 SSRS 创建一个存储过程 - 这就是我的 SSRS 的方式。
  • 好的,然后你用一个表格来显示它。但是,如果您需要一个新列,则需要同时更改您的存储过程(除非您使用动态 SQL)和您的报告(无论您是否使用动态 SQL)。
  • @Rob:是的,但即使你使用 PIVOT 也不会改变。这就是将列数据转换为行的现实。
  • 正确。我说过类似“您可以使用 PIVOT,但最好是在 SSRS 中使用以提高灵活性”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多