我被要求修改一份报告(不幸的是,写得非常糟糕!!不是我!)包括一天的计数。请注意,“天数”不是使用“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
答案 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。应用程序可以很好地处理它。但大多数人使用最终用户报告工具来做这种事情,以避免编写程序所涉及的更高成本。
如果您指定用于生成此报告的工具,我们可能会提供进一步的帮助。