所以我有一张桌子,它的基础是以下结构:
(还有其他的东西,但我们为了这个问题而忽略了它们)
我正在过滤类型/类别的某个子集,我知道如何做到这一点。但我需要提出的是以下
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软件,我们不付钱更改它)
答案 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
以获取计算出的差异,该差异可能是您想要的,也可能不是。