我已經問了一個類似的問題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