【问题标题】:How should I write a Query with "Group By Clause" to get following specified output?我应该如何使用“Group By Clause”编写查询以获得以下指定输出?
【发布时间】:2013-09-30 10:09:49
【问题描述】:

我在 MSBI 查询编辑器中编写了如下查询,

SELECT 
DATEPART(year,tblReservation.Date) AS "Year",
tblReservation.Room AS "Room No.",
COUNT(tblReservation.Room) AS "No. Of Times", 

CASE 
WHEN PaidFor = 1 
THEN 
COUNT(tblReservation.Room)*tblPrice.Price 
ELSE 0 
END AS "ActualRevenue",

COUNT(tblReservation.Room)*tblPrice.Price AS "TargetRevenue"

FROM tblReservation INNER JOIN tblRoom 
ON tblReservation.Room = tblRoom.RoomNumber 
INNER JOIN
tblPrice ON tblRoom.PriceID = tblPrice.PriceID

GROUP BY tblReservation.Room, tblPrice.Price,
tblReservation.PaidFor, DATEPART(year,tblReservation.Date)

这个查询显示这样的输出(矩阵布局 MSBI),

我的查询输出为,

我的报告设计布局是,

我想要的是,在我的矩阵布局中,房间号。 100 是 1999 年和 2013 年的两倍。 它占据了两行。我希望它在我的矩阵布局中的一行中。 我应该怎么做 ? 谢谢。

【问题讨论】:

  • 您能否提供一个包含几行的示例数据集,即您查询的一些典型输出?
  • 嗨。我还指定了我的查询输出。

标签: sql-server-2008 reporting-services business-intelligence


【解决方案1】:

如果没有更多细节,很难判断您的矩阵发生了什么,但无需任何特殊努力,这一切都应该可以正常工作。

获取数据的子集:

创建一个标准矩阵,在列组中添加一些额外的列:

您可以看到行组基于RoomNo,列组基于Year。数据单元格只是聚合值。这适用于 100 号房间:

如果没有更多细节,就不可能说出是什么导致了您的问题,但以上表明这当然是可能的,一切都是标准的。

在你的情况下,我会尝试:

  1. 检查行组详细信息,看看它是否被分组在RoomNo 以外的任何地方;列组和Year 相同。

  2. 使用上述分组从头开始创建一个新的文本矩阵,看看这个新项目是否按预期工作。

【讨论】:

  • 嗨兰。我做了与你在图片中所做的相同的分组。但没有得到,为什么房间号需要两排。 100. 请检查我上面的设计布局。请同时检查我的查询。
猜你喜欢
  • 2021-09-06
  • 1970-01-01
  • 2021-12-30
  • 2015-05-23
  • 1970-01-01
  • 2022-08-04
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
相关资源
最近更新 更多