如何获得多行的总计1次

时间:2012-02-29 22:31:18

标签: sql sql-server sql-server-2008

我被要求修改一份报告(不幸的是,写得非常糟糕!!不是我!)包括一天的计数。请注意,“天数”不是使用“StartDate”& “EndDate”如下。问题是,每条记录有多行(用户希望查看start& enddate的详细信息),因此我的“Days”总数正在计算每一行。如何在没有列重复的总数的情况下获得总共1次?

这就是现在的数据:

ID          Description     startdate   enddate        Days
REA145681   Emergency       11/17/2011  11/19/2011      49
REA145681   Emergency       12/6/2011   12/9/2011       49
REA145681   Emergency       12/10/2011  12/14/2011      49

REA146425   Emergency       11/23/2011  12/8/2011       54
REA146425   Emergency       12/9/2011   12/12/2011      54

我需要这个:

ID          Description     startdate   enddate        Days
REA145681   Emergency       11/17/2011  11/19/2011      49
REA145681   Emergency       12/6/2011   12/9/2011       
REA145681   Emergency       12/10/2011  12/14/2011      

REA146425   Emergency       11/23/2011  12/8/2011       54
REA146425   Emergency       12/9/2011   12/12/2011     

请帮助。这是用户想要查看数据的方式。 提前谢谢!

利兹

---这是简化的查询:

    select id
,description
,startdate     -- users want to see all start dates and enddates
,enddate
,days = datediff(d,Isnull(actualstardate,anticipatedstartdate) ,actualenddate) 
    from table

3 个答案:

答案 0 :(得分:2)

由于您没有提供表格的数据,我会对您的结果进行操作,就好像它是一张桌子一样。这将导致您正在寻找的东西:

select *, 
  case row_number() over (partition by id order by id)
    when 1 then days
  end
from t

修改

看起来你DID添加了一些SQL代码。这应该是你正在寻找的:

select *, 
  case row_number() over (partition by id order by id)
    when 1 then
      datediff(d,Isnull(actualstardate,anticipatedstartdate) ,actualenddate)
  end
from t

答案 1 :(得分:0)

这是报告工具的任务。您将不得不在Days字段的显示属性中编写类似下一个代码的内容:

if RowNumber > 1 AND id = previous_row(id) 
  then -- hide the value of Days
       Colour = BackgroundColour
       Days = NULL
       Days = ' '
       Display = false
       ... (anything that works)

答案 2 :(得分:0)

所以他们希望输出完全相同,只是他们不希望看到每个ID值多次列出的日期?而且他们很高兴能够反复看到ID和说明,但Days值会让他们烦恼吗?

这不是一个SQL问题。 SQL是关于应该以什么顺序呈现哪些行,列和派生值,并且该部分似乎正常工作。

抑制Days值的冗余出现更多的是使用正确的工具。我不是现在的工具,但是最后一次,QMF对这种事情非常好。如果一列是控制中断的基础,您实际上可以为该列选择一个选项,告诉它不要重复重复控制中断的值。这样,如果这是您想要的,您可以防止它重复ID,描述和日期。但我不知道人们是否还在使用QMF而且我不知道你是不是。除非价格下降,否则您不想出去购买QMF只是为了抑制那些多余的价值。

其他工具可能会做同样的事情,但我无法告诉你哪些。也许您用来进行报告的工具 - Crystal Reports或其他 - 具有该功能。或不。我认为它在QMF中被称为概述,但它在您的工具中可能有不同的名称。

现在,如果这个报告是由一个应用程序生成的,那就是一个不同的Fish。应用程序可以很好地处理它。但大多数人使用最终用户报告工具来做这种事情,以避免编写程序所涉及的更高成本。

如果您指定用于生成此报告的工具,我们可能会提供进一步的帮助。