我已经问了一个类似的问题here,并得到jpw谁帮我查询。这里的情况保持不变,但只增加了一点细节。我有四张桌子。以下为他们三人的样本结构给出: 从多个表中提取MS SQL Server-2008的数据
我一直在帮助形成查询其下面有云:
select
d.LOTQty,
ApprovedQty = count(d.SerialNo),
d.DispatchDate,
Installed = count(a.SerialNo) + count(r.SerialNo)
from
Despatch d
left join
Activation a
on d.SerialNo= a.SerialNo
and d.DispatchDate <= a.ActivationDate
and d.LOTQty = a.LOTQty
left join
Replaced r
on d.SerialNo= r.SerialNo
and d.DispatchDate <= r.ActivationDate
and (a.ActivationDate is null or a.ActivationDate < d.DispatchDate)
where
d.LOTQty = 15
group by
d.LOTQty, d.DispatchDate, d.STBModel
对于理解起见,上面的查询匹配Despatch
表的SerialNo
与Activation
表。如果匹配发现它检查日期差异。如果DespatchDate < ActivationDate
只有这些数字被考虑,而其他数字(不匹配或者其他DispatchDate > ActivationDate
)与被替换为相似的日期标准。所以在最后,我们发现9场比赛,即7从Activation
和2从Replaced
如下:
LotQty | ApprovedQty | DispatchDate | Installed
15 | 10 | 2013-8-7 | 9
我想在这里也就是DOA
和Bounce
这样显示两列:
LotQty | ApprovedQty | DispatchDate | Installed | DOA | Bounce
15 | 10 | 2013-8-7 | 9 | 2 | 4
DOA和跳动应计算与第4个表之间的差异即Failed
表的FailedDate
和上面9个匹配的SerialNo的相应激活/记录日期(以下称为act_rec_date)。 Failed
表和中间体9匹配下面的SerialNo的结构如下所示:
Intermediate
表物理上不存在。它仅供参考,并提供更多清晰。 Intermediate
表包含那些SerialNo
,这与Activation
和Replaced
表匹配。 act_rec_Date
字段相应匹配激活/记录日期。
- DOA &反弹 =我们应该
Failed
表匹配所有9产生的SerialNo的(即中间表)。如果匹配,则计算FailedDate
和act_rec_date
之间的差异。如果差值为(0 to <=10 days)
则计算它在DOA
之下,如果差值为(>10 days to <=180 days)
则根据Bounce
对其进行计数。从Failed
我们找到6个匹配结果,产品1,2落入DOA
,因为act_rec_Date为0和Product7,8,9之间的差异& 10属于Bounce
,因为它们的区别是89 | 54 | 61 | 61
。因此,上述DOA = 2
和Bounce = 4
如图所示我想建立一个查询这可能给我DOA和弹跳以及。我尝试创建一个临时表并将结果SerialNo和act_rec_Date转储到它中。接下来我尝试匹配临时表和失败表。我无法工作,甚至花了大约7分钟甚至执行查询。
P.S-我的实际表格包含大约50k到100k的数据条目。
@ JPW查询工作的罚款为样本数据。但是当我试着用一个更大的样本对每个表格中的60-80数据进行测试时,结果是不同的。我尝试了粘贴SQL小提琴中使用的表格脚本,但它被吹掉了。所以我在[Pastebin](http://pastebin.com/3wf4Y7Sm)中从SQL-Server 2008粘贴了我的表格脚本。你能看看吗? “LotQty”,“ApprovedQty”,“DispatchDate”,“Installed”,“DOA”和“Bounce”的预期答案是**。 47 | 2013-10-3 | 40 | 7 | 8 **,但我得到**'47 | 49 | 2013-10-3 | 40 | 7 | 7' **,对于我的真实表格,差异更大 – 2015-03-14 07:29:48
@KC我已经看过它,并且我无法得到相同的结果,但是我得到了 '47 | 47 | 2013-10-31 | 40 | 7 | 7'。它显示49安装的原因是因为替换表中有两个产品有两个日期。我看不出弹跳可以达到8次。 – jpw 2015-03-14 14:52:08
@ jpw但是'ApprovedQty'应该完全基于**'Despatch' **表格显示。 **'Despatch' **表只包含47个数据条目,并且它应该从Despatch获得批次47 **的**计数(SerailNo)。一般来说,它可以等于LotQty或更少,但从不更多。我会手动检查数据n让你知道'Bounce'我说错了。谢谢 – 2015-03-14 15:26:21