我正在研究價格和折扣資訊的 Access 資料庫,我以為我已經弄清楚了,但只是注意到它實際上仍然從我的查詢中排除了我的一條資料記錄,我不完全確定為什么。這就是我所擁有的(我只是做了一小套測驗)
第一張是折扣資訊,第二張是價格資訊,第三張是我的理想結果,第四張是我目前的結果
| 庫存單位 | 開始 | 結尾 | PID | 做過 | AMT | 數量 |
|---|---|---|---|---|---|---|
| 1 | 2022 年 5 月 3 日 | 2022 年 5 月 7 日 | 2000 | 2000-001 | 1 | 1 |
| 1 | 2022 年 5 月 17 日 | 2022 年 5 月 28 日 | 2002年 | 2002-001 | 5 | 10 |
| 2 | 2022 年 5 月 3 日 | 2022 年 5 月 7 日 | 2000 | 2000-001 | 1 | 1 |
| 2 | 2022 年 5 月 12 日 | 2022 年 5 月 14 日 | 2001年 | 2001-001 | 3 | 5 |
| 2 | 2022 年 5 月 12 日 | 2022 年 5 月 14 日 | 2001年 | 2001-002 | 1.5 | 5 |
| 2 | 2022 年 5 月 17 日 | 2022 年 5 月 28 日 | 2002年 | 2002-001 | 5 | 10 |
| 3 | 2022 年 5 月 17 日 | 2022 年 5 月 28 日 | 2002年 | 2002-001 | 5 | 10 |
| 庫存單位 | 味道 | 開始 | 結尾 | 價格 | 成本 |
|---|---|---|---|---|---|
| 1 | 櫻桃 | 2022 年 5 月 1 日 | 2022 年 5 月 11 日 | 20 | 10 |
| 1 | 櫻桃 | 2022 年 5 月 12 日 | 2022 年 5 月 27 日 | 24 | 12 |
| 1 | 櫻桃 | 2022 年 5 月 28 日 | 2022 年 5 月 31 日 | 28 | 14 |
| 2 | 草莓 | 2022 年 5 月 1 日 | 2022 年 5 月 11 日 | 20 | 10 |
| 2 | 草莓 | 2022 年 5 月 12 日 | 2022 年 5 月 27 日 | 24 | 12 |
| 2 | 草莓 | 2022 年 5 月 28 日 | 2022 年 5 月 31 日 | 28 | 14 |
| 3 | 西瓜 | 2022 年 5 月 1 日 | 2022 年 5 月 11 日 | 20 | 10 |
| 3 | 西瓜 | 2022 年 5 月 12 日 | 2022 年 5 月 27 日 | 24 | 12 |
| 3 | 西瓜 | 2022 年 5 月 28 日 | 2022 年 5 月 31 日 | 28 | 14 |
| 4 | 桃 | 2022 年 5 月 1 日 | 2022 年 5 月 11 日 | 20 | 10 |
| 4 | 桃 | 2022 年 5 月 12 日 | 2022 年 5 月 27 日 | 24 | 12 |
| 4 | 桃 | 2022 年 5 月 28 日 | 2022 年 5 月 31 日 | 28 | 14 |
| 庫存單位 | 味道 | 性病 | 結尾 | 佛羅里達州 | 離岸價 | 性病 | 結尾 | PID | 做過 | AMT | 數量 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 櫻桃 | 2022 年 5 月 1 日 | 2022 年 5 月 11 日 | 20 | 10 | 2022 年 5 月 3 日 | 2022 年 5 月 7 日 | 2000 | 2000-001 | 1 | 1 |
| 1 | 櫻桃 | 2022 年 5 月 12 日 | 2022 年 5 月 27 日 | 24 | 12 | 2022 年 5 月 17 日 | 2022 年 5 月 28 日 | 2002年 | 2002-001 | 5 | 10 |
| 1 | 櫻桃 | 2022 年 5 月 28 日 | 2022 年 5 月 31 日 | 28 | 14 | 2022 年 5 月 17 日 | 2022 年 5 月 28 日 | 2002年 | 2002-001 | 5 | 10 |
| 2 | 草莓 | 2022 年 5 月 1 日 | 2022 年 5 月 11 日 | 20 | 10 | 2022 年 5 月 3 日 | 2022 年 5 月 7 日 | 2000 | 2000-001 | 1 | 1 |
| 2 | 草莓 | 2022 年 5 月 12 日 | 2022 年 5 月 27 日 | 24 | 12 | 2022 年 5 月 12 日 | 2022 年 5 月 14 日 | 2001年 | 2001-002 | 1.5 | 5 |
| 2 | 草莓 | 2022 年 5 月 28 日 | 2022 年 5 月 31 日 | 28 | 14 | 2022 年 5 月 17 日 | 2022 年 5 月 28 日 | 2002年 | 2002-001 | 5 | 10 |
| 3 | 西瓜 | 2022 年 5 月 1 日 | 2022 年 5 月 11 日 | 20 | 10 | ||||||
| 3 | 西瓜 | 2022 年 5 月 12 日 | 2022 年 5 月 27 日 | 24 | 12 | 2022 年 5 月 17 日 | 2022 年 5 月 28 日 | 2002年 | 2002-001 | 5 | 10 |
| 3 | 西瓜 | 2022 年 5 月 28 日 | 2022 年 5 月 31 日 | 28 | 14 | 2022 年 5 月 17 日 | 2022 年 5 月 28 日 | 2002年 | 2002-001 | 5 | 10 |
| 4 | 桃 | 2022 年 5 月 1 日 | 2022 年 5 月 11 日 | 20 | 10 | ||||||
| 4 | 桃 | 2022 年 5 月 12 日 | 2022 年 5 月 27 日 | 24 | 12 | ||||||
| 4 | 桃 | 2022 年 5 月 28 日 | 2022 年 5 月 31 日 | 28 | 14 |
| 庫存單位 | 味道 | 性病 | 結尾 | 佛羅里達州 | 離岸價 | 性病 | 結尾 | PID | 做過 | AMT | 數量 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 櫻桃 | 2022 年 5 月 1 日 | 2022 年 5 月 11 日 | 20 | 10 | 2022 年 5 月 3 日 | 2022 年 5 月 7 日 | 2000 | 2000-001 | 1 | 1 |
| 1 | 櫻桃 | 2022 年 5 月 12 日 | 2022 年 5 月 27 日 | 24 | 12 | 2022 年 5 月 17 日 | 2022 年 5 月 28 日 | 2002年 | 2002-001 | 5 | 10 |
| 1 | 櫻桃 | 2022 年 5 月 28 日 | 2022 年 5 月 31 日 | 28 | 14 | 2022 年 5 月 17 日 | 2022 年 5 月 28 日 | 2002年 | 2002-001 | 5 | 10 |
| 2 | 草莓 | 2022 年 5 月 1 日 | 2022 年 5 月 11 日 | 20 | 10 | 2022 年 5 月 3 日 | 2022 年 5 月 7 日 | 2000 | 2000-001 | 1 | 1 |
| 2 | 草莓 | 2022 年 5 月 12 日 | 2022 年 5 月 27 日 | 24 | 12 | 2022 年 5 月 12 日 | 2022 年 5 月 14 日 | 2001年 | 2001-002 | 1.5 | 5 |
| 2 | 草莓 | 2022 年 5 月 28 日 | 2022 年 5 月 31 日 | 28 | 14 | 2022 年 5 月 17 日 | 2022 年 5 月 28 日 | 2002年 | 2002-001 | 5 | 10 |
| 3 | 西瓜 | 2022 年 5 月 12 日 | 2022 年 5 月 27 日 | 24 | 12 | 2022 年 5 月 17 日 | 2022 年 5 月 28 日 | 2002年 | 2002-001 | 5 | 10 |
| 3 | 西瓜 | 2022 年 5 月 28 日 | 2022 年 5 月 31 日 | 28 | 14 | 2022 年 5 月 17 日 | 2022 年 5 月 28 日 | 2002年 | 2002-001 | 5 | 10 |
| 4 | 桃 | 2022 年 5 月 1 日 | 2022 年 5 月 11 日 | 20 | 10 | ||||||
| 4 | 桃 | 2022 年 5 月 12 日 | 2022 年 5 月 27 日 | 24 | 12 | ||||||
| 4 | 桃 | 2022 年 5 月 28 日 | 2022 年 5 月 31 日 | 28 | 14 |
我在 Access 中運行的 SQL 代碼:
SELECT PC.SKU, PC.Flavor, DC.STD, DC.END, DC.DID, DC.AMT, DC.QTY, PC.STD, PC.END, PC.FL, PC.FOB
FROM PC LEFT OUTER JOIN DC ON PC.SKU = DC.SKU
WHERE (([DC]![STD]>=[PC]![STD] And [DC]![STD]<=[PC]![END])
OR ([DC]![END]>=[PC]![STD] And [DC]![END]<=[PC]![END])
OR ([DC]![STD] IS NULL AND [DC]![END] IS NULL));
我想查看該商品的價格,即使它沒有折扣,我也想查看所有折扣,即使它會重復某些價格的行。我讓這個 SQL 語法幾乎完美地作業,但后來注意到在我當前的結果中,從 22 年 5 月 1 日到 22 年 5 月 11 日,第 3 項(西瓜)沒有價格,因為沒有折扣時間。因為它目前正在生成第 4 項,所以我不確定它為什么不包括這一行。有人有任何提示嗎?
簡單地說,如果任一日期范圍內有一天重疊,我想再看一行。如果一個折扣在價格結束的同一天開始,我仍然喜歡這個結果。我對 SQL 有點陌生,任何提示將不勝感激。
uj5u.com熱心網友回復:
問題是西瓜的 DC.STD 永遠不會為空,因為還有其他行滿足連接條件。桃子不是這種情況。
您可以通過將涉及外部表的所有條件移至 ON 子句來解決此問題
SELECT PC.SKU, PC.Flavor, DC.STD, DC.END, DC.DID, DC.AMT, DC.QTY, PC.STD, PC.END, PC.FL, PC.FOB
FROM
PC
LEFT OUTER JOIN DC
ON
(PC.SKU = DC.SKU AND
(
(DC.STD>=PC.STD And DC.STD<=PC.[END]) OR
(DC.[END]>=PC.STD And DC.[END]<=PC.[END])
)
);
我們甚至可以洗掉 IS NULL 部分,因為這是由 LEFT OUT JOIN 自動處理的。
請注意,日期范圍的重疊必須使用
DC.STD <= PC.[END] AND DC.[END] >= PC.STD
即DC 的開始必須在PC 的結束之前或等于PC 的結束,DC 的結束必須在PC 的開始之后或等于PC 的開始。因為你可以有DC.STD < PC.STD AND DC.[END] > PC.[END],這些日期會重疊,但會通過你的測驗。
PC |----------|
DC |---------------|
所以,正確的查詢是
SELECT PC.SKU, PC.Flavor, DC.STD, DC.END, DC.DID, DC.AMT, DC.QTY, PC.STD, PC.END, PC.FL, PC.FOB
FROM
PC
LEFT OUTER JOIN DC
ON
(PC.SKU = DC.SKU AND
DC.STD <= PC.[END] AND DC.[END] >= PC.STD);
Access 查詢設計器有時會弄亂這個 ON 子句。因此,除了存盤的查詢之外,您還應該將此查詢存盤在安全的地方。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/515196.html
