我遇到的问题是SQL Server Reporting Services不喜欢Sum(First())表示法。它只允许Sum()或First()。
上下文
我正在创建对帐报告。即。什么袜子我们有一个时期的开始,订购什么和我们最后有什么股票。
的内容
Type,Product,Customer,Stock at Start(SAS), Ordered Qty, Stock At End (SAE) Export,1,1,100,5,90 Export,1,2,100,5,90 Domestic,2,1,200,10,150 Domestic,2,2,200,20,150 Domestic,2,3,200,30,150
我按类型分组,然后按产品列出并列出购买该产品的客户。 我想显示SAS,Ordered Qty和SAE的总数,但是如果我在SAS或SAE上做了总和,那么当产品1和2分别为100和200时,我得到的值分别为200和600。 / p>
我认为我可以做一个Sum(First())但是SSRS抱怨我不能在聚合中有一个聚合。
理想情况下,SSRS需要Sum(Distinct())
到目前为止的解决方案
1.不要将开始时的库存和最后的库存显示为总计的一部分
2.直接在报告中编写一些代码来进行计算。尝试过这个 - 没有按照我的预期工作。
3.编写程序集进行计算。 (没试过这个)
编辑 - 问题澄清
问题源于这一事实,实际上这两个报告合并为一个(我认为)。生产报告和销售报告
该报告试图解决这些标准
复杂因素是我们将它卖给谁。不管怎样,它本来就很容易。但包括它意味着其他顶线数字(开始时的库存和最后的库存)与销售的产品无关,而不是特定的产品。
答案 0 :(得分:5)
我有类似的问题,最后在我的查询中使用ROW_NUMBER为行值提供整数,然后使用SUM(IIF(myRowNumber = 1,myValue,0))。
当我开始工作并提供更多数据时,我会对此进行编辑,但我认为这可能足以让您入门。我对阿道夫的解决方案也很好奇。
答案 1 :(得分:1)
呸!我的挂钩在哪里?!
您是否考虑过在SQL中使用窗口/排名函数?
这使您可以在不丢失详细信息的情况下聚合数据
e.g。想象一下一系列值,你想要Min和Max返回,但你也希望返回初始数据(没有数据摘要)。
Group Value Min Max
A 3 2 9
A 7 2 9
A 9 2 9
A 2 2 9
B 5 5 7
B 7 5 7
C etc..
语法看起来很奇怪但只是
AggregateFunctionYouWant OVER (WhatYouWantItGroupedBy, WhatYouWantItOrderedBy) as AggVal
答案 2 :(得分:1)
你的数据集有点奇怪,但我想我明白你要去哪里。
尝试按以下顺序返回数据集: 类型,产品,SAS,SAE,客户,订购数量
我要做的是创建一个带有表格控件的报表。我会将类型,产品和客户设置为三个独立的组。我会将sas和sae数据放在与产品相同的组中,并将数量放在客户组上。这应该类似于我认为你想要的东西。你的sas和sae应该在第一个()
答案 3 :(得分:0)
写一个子查询。
理想情况下,SSRS需要Sum(Distinct())
重新编写您的查询以正确执行此操作。
我怀疑你的问题是你写了一个查询错误的结果,或者你设计的表格很差。如果不知道你想要做什么,我不能告诉你如何解决它,但它有一个糟糕的“气味”。