0

所以我有一张桌子,它的基础是以下结构:

  • 工作指示
  • 子订单
  • 地位
  • 状态日期
  • 类型
  • 类别

(还有其他事情,但为了这个问题,我们忽略了它们)

我正在过滤类型/类别的某个子集,我知道该怎么做。但我需要出来的是以下

WorkOrder | SubOrder | Type - Category | Min(StatusDate) where Status = Open | Min(StatusDate) where Status = Complete | Calculated Date Difference between the two

我可以一次得到一个,这没问题。Ror 暂时,我只是在 Excel 中玩弄它。但是,我需要将其放入我需要开始生成的报告的 SQL 语句中。可能有也可能没有状态为 Complete 的 StatusDate(如果 SubOrder 没有在其他地方标记为完成),并且数据集也需要反映这一点。每个 SubOrder 可能有多次打开和完成,所以我们只需要第一次(因此是 Min())

关于我应该如何处理这项任务的任何想法?(不,不允许更改数据结构,OTS 软件,我们不支付更改它的费用)

4

1 回答 1

0

我不确定我是否理解您为什么需要将表连接到自身。听起来你只是想要

SELECT WorkOrder,
       SubOrder,
       Type,
       Category,
       min( case when Status = 'Open' 
                 then StatusDate 
                 else null 
             end) min_open_status_date,
       min( case when Status = 'Complete' 
                 then StatusDate 
                 else null 
             end) min_complete_status_date,
       min( case when Status = 'Complete' 
                 then StatusDate 
                 else null 
              end) - 
         min( case when Status = 'Open' 
                   then StatusDate 
                   else null 
                end)
  FROM table_name
 WHERE <<whatever conditions>>
 GROUP BY WorkOrder,
          SubOrder,
          Type,
          Category

如果这不是您要查找的内容,那么在 DDL 后编辑您的问题以创建表,DML 以填充一些行,并准确告诉我们您想要该示例数据的输出,这将非常有帮助。或者在sqlfiddle.com上创建一个小提琴。否则,我们必须猜测你想要什么。例如,您说您想计算两个日期之间的差异,但两个日期之一可能不存在——如果没有关闭日期,您是否要使用某个基准日期进行计算?此查询将返回NULL计算出的差异,这可能是您想要的,也可能不是您想要的。

于 2013-01-31T20:35:09.090 回答