根据不同的标准加入自己的表格

时间:2013-01-31 20:26:13

标签: sql join oracle11g

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

  • 工作单
  • 亚目
  • 状态
  • StatusDate
  • 类型
  • 分类

(还有其他的东西,但我们为了这个问题而忽略了它们)

我正在过滤类型/类别的某个子集,我知道如何做到这一点。但我需要提出的是以下

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

我可以一次得到一个,这不是问题。暂时不说,我刚刚用Excel对它进行了修改。但是,我需要将其转换为SQL语句,以获取我需要开始生成的报告。可能有也可能没有状态为Complete的StatusDate(如果SubOrder未在其他地方标记为完成),并且数据集也需要反映这一点。每个SubOrder可以多次打开并完成,所以我们只需要第一个(因此Min())

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

1 个答案:

答案 0 :(得分: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以获取计算出的差异,该差异可能是您想要的,也可能不是。