T-SQL Group by / Order by + SQL Server Reporting Service参数

时间:2013-07-31 15:49:42

标签: sql-server tsql reporting-services

select
    Users.UserId
   ,Users.FirstName + ' ' + Users.LastName AS
   ,[Month]
   ,[Day]
   ,x.[Przych]
   ,x.[Wych]
   ,x.[Przych] + [Wych] as [Ogół]
from
   (select
       CaseActionHistory.UserId
       ,month(CaseActionHistory.DateAdded) AS [Month]
       ,day(CaseActionHistory.DateAdded) AS [Day]
       ,sum(case when CaseActionHistory.CaseActionDefinitionId in (14,15,16) then 1 else 0 end) AS [Przych]
      ,sum(case when CaseActionHistory.CaseActionDefinitionId in (20,21,22,23,26) then 1 else 0 end) AS [Wych]
    from CaseActionHistory
    where CaseActionHistory.CaseActionDefinitionId in (14,15,16,20,21,22,23,26)
    group by month(CaseActionHistory.DateAdded),day(CaseActionHistory.DateAdded), CaseActionHistory.UserId
    order by month(CaseActionHistory.DateAdded) DESC,day(CaseActionHistory.DateAdded) DESC
OFFSET 0 rows
) AS x
inner join Users on x.UserId = Users.UserId

我正试图用完这个东西。我的问题是:这样的查询结果显示如下:

User    Month    Day    X
User1     7       31    6
User2     7       31    7
User3     7       31    9
User1     7       30    8
User2     7       30    7
User3     7       30    8 
User4     7       31    10
User5     7       31    20
User6     7       31    23
User4     7       30    5
User5     7       30    7
User6     7       30    65

所以实际上很少有用户被分组成小组,然后是第一组,然后是第二组等等。所以我认为分组或顺序都有问题。

作为补充,我想问一个关于SQL Server中参数的问题。在下面的代码中,我想设置3个参数:

User
Month
Day

但我的问题是,当我设置参数的细节并运行它时,一些值会成倍增加。相同的用户乘以几次,同月,同一天等。报告本身也不会对参数内的任何变化做出反应。


报告的主要思想是显示每位员工每天,每月完成的电话呼叫次数,并能够将结果与其他人进行比较。

呼叫被分为:传出和传入。每次拨打电话后,员工都会向系统添加有关该电话的信息以及他们在此电话中设法做的事情。

所以实际上我们在这种情况下正在处理2个表:

CaseActionHistory和用户

因此,计划是显示每个人每天的电话呼叫次数(传入,传出和总和)。

由于CaseActionHistory表仅包含完成操作的User的ID,而我想显示该人的姓名(显然位于Users表中)。

问题是该报告应该逐个显示大约20个用户,因此6月31日的第一个用户逐个,第30个20个用户逐个等,但它显示为5个用户31个,然后相同的用户30日,接下来5名用户31日等(链接到图片显示下面的情况)

http://img801.imageshack.us/img801/2088/7blu.png

列是:

UserId(将被UserName替换)Day Month Incging Outgoing Sum

7月31日底部的行应该在列表的顶部,但它们不是。

1 个答案:

答案 0 :(得分:0)

欢迎使用堆栈溢出。一些事情:

  1. 如果您的数据是“倍增”,您可能只是在主选择语句中执行'distinct'并确定它是否不是您的数据集重复?
  2. 您如何应用参数?它们应该是谓词,除了间接地与分组无关。您可以通过参数限制一组,但一般来说它不会直接影响您的分组。
  3. 你想要分组的是什么?年,月,(详细)?
  4. SSRS以数据连接(数据源)开始。然后,您应用一个数据集,这是一个查询或proc。您有哪些查询。您可以使用'where User = @User'或'User in in(@User)'将谓词应用于主数据集。如果您首先在数据集中使用'@(something)'创建所述名称的文本参数,则会自动创建该参数。您可以在“报表数据”视图中看到内置字段,参数,图像,数据源和数据集,您将在使用“商业智能开发工作室”创建SSRS时不断使用这些数据集。

    因此,一个简单的例子就是您希望将日期组添加到“(详细信息)”行。如果从“工具箱”创建“表”元素,它将只有一行名为“细节”。用你的X值和用户填写。在底部的“设计”表面中,您将看到“行组”。右键单击“详细信息”行,然后选择“添加父组”。按“日”分组检查“添加组头”。您现在有另一行将按日分组。您可以在新创建的组中为“月”等组重复此过程,依此类推。