需要 SQL 聚合查询帮助
生成可用于 SQL Server Reporting Services 报告以显示以下内容的数据集的最直接方法是什么:
SalesPerson # Sales # Gross Profit
John Doe 100 $140,000 $25,000
Everyone Else (Avg.) 1200 $2,000,000 $250,000
Jane Smith 80 $100,000 $15,000
Everyone Else (Avg.) 1220 $2,040,000 $260,000
...and so on.
这是我正在尝试执行的操作的一个非常非常简单的示例(例如,真实场景)涉及显示“其他人”,分为三个分类行),但它说明了显示每个人的汇总数据并与其他人(排除)进行比较的主要目标。伪代码就可以了。我第一次尝试 SQL 代码很快就陷入了困境,我知道必须有一个更直接的方法。
任何提示表示赞赏。
What is the most straightforward approach to producing a data set that can be used in a SQL Server Reporting Services report to display the following:
SalesPerson # Sales # Gross Profit
John Doe 100 $140,000 $25,000
Everyone Else (Avg.) 1200 $2,000,000 $250,000
Jane Smith 80 $100,000 $15,000
Everyone Else (Avg.) 1220 $2,040,000 $260,000
...and so on.
This is a very, very simplified example of what I'm trying to do (for instance, the real scenario involves showing the 'Everyone Else' broken out into three categorical rows), but it illustrates the primary objective of displaying aggregate data for each individual with a comparison to everyone else (exclusive). Pseudo-code would be fine. My first stab at the SQL code for this got pretty tangled pretty quickly, and I know there must be a more direct method.
Any tips appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您不介意稍后格式化,那么如果我们假设您有类似的内容:
首先,我需要一些辅助变量来计算总计数,
然后我们获取给定时期(年份 = 2009)内每个人的总计数
,现在每个人与其他人的总计数,但全部在一行中。
现在,您可以将所有这些打包到带有日期间隔参数的存储过程中。可能仍然需要调整销售人员的数量,以确定哪些人在特定时期内活跃,以及如何计算那些没有销售任何产品的人。这样,
EveryoneElse
表示售出商品的销售人员数量 -1;因此,如果您有 10 名销售人员,但只有 5 名销售人员销售了产品,则EveryoneElse = 4
。If you do not mind formatting later, then if we assume you have something like:
First I'll need some helper variables for total counts
Then we fetch total for everyone in a given period (YEAR = 2009)
And now for each person vs everyone else, but all in one row.
Now you can package all this in a stored procedure with parameter(s) for date interval. May still need to tweak number of sales people to determine which were active in a certain period and how to count those who did not sell anything. With this,
EveryoneElse
means number of sales people who sold something -1; so if you have 10 sales people and only 5 sold something, thanEveryoneElse = 4
.几乎可以肯定性能不是很好,但声明式清晰:(
UNION
的第二部分肯定可以改进,但已经晚了,我无法直接思考..)Almost certainly not very performant, but declaratively clear:
(The second part of the
UNION
can definitely be improved, but it's late and I can't think straight..)在 SSRS 中,在表中添加额外的详细信息行。然后在聚合函数上使用 Scope 参数,并根据第一原理进行平均。
例如:
In SSRS, put an extra detail row in your table. Then use the Scope parameter on aggregate functions, and do the average from first principles.
Eg:
我在这里做了一些假设,但是如果您有一个像这样的表
,其中填充了像这样的数据,
那么像这样的存储过程可能会为您提供您正在寻找的内容
I am making some assumptions here but if you have a table like so
That is populated with Data like so
Then a stored procedure like so may give you what you are looking for