我有一個數據庫,其中有13種不同的產品,在6個不同的國家銷售。Access 2013 SQL在必要時執行線性插值
價格每年上漲一次。
價格需要使用線性插值方法計算。每個國家每種產品每年有21種不同的價格和數量增量。
用戶需要能夠看到多少訂單將花費任何給定的價值(如你所期望的)。 (!英文)
什麼數據庫需要做的是:
如果從TblOrderDetail在TblPrices匹配的數量, 使用價格爲當前產品,國家和年份
如果沒有匹配量,但需求數量大於1000一個產品(GT)和大於100爲每一個其他產品: 查找產品,國家和年內最高量(小號o,1000或100,取決於產品),並計算按比例分攤的價格。例如。如果有人想在2015年爲英國購買1500件產品GT,我們會考慮2015年英國1000 GT的價格,並將其乘以1.5。如果需要1800,我們會乘以1.8。我一直沒有能夠得到這個工作,因爲我正在與下一個可能性的公式一起看它...
如果沒有匹配的數量,並且所需的數量少於1000產品GT,但其他產品爲100(這是常態)... 找到數量和價格直接低於用戶所需的產品,國家和年份所需的數量(讓我們稱這些數量低於price below)
查找所需產品,國家和年份用戶所需數量正上方的增量數量和價格(我們稱之爲數量上限和價格)
使用此公式計算特定國家/地區帳戶持有人在特定國家/地區的所需產品數量的價格。
ActualPrice: PriceBelow + ((PriceAbove - PriceBelow) * (The quantity required in the order detail - QuantityBelow)/(QuantityAbove - QuantityBelow))
我已經花了幾天時間,並已就此尋求建議,但我仍然陷入困境。是
我一直在努力,試圖使這項工作的表格如下:
TblAccount(主鍵是帳戶ID,它也有一個國家字段,加入到TblCountry.Code(主鍵)
TblOrders(主鍵是訂單ID),它通過AccountID字段加入TblAccount;通過OrderID加入TblOrderDetail。此表還包含鏈接到TblContact中某個人的OrderDate和Recipient ID - 我不需要這裏,但稍後需要它來生成發票
TblOrderDetail(主鍵是DetailID),它通過OrderID連接到TblOrders領域;通過產品id字段TblProducts,並保持所要求的數量以及產品
TblProducts(主鍵是產品代碼),它以及加入到TblOrderDetail,還加入通過產品字段到TblPrice
TblPrices鏈接到TblProducts(正如您剛剛閱讀的)。我還爲TblCountry(CountryAliasForProductCode)創建了別名,以便我可以將其鏈接到TblPrices以顯示國家/地區鏈接。我不確定是否需要這樣做 - 如果我這樣做,或者我不這樣做,這是行不通的,所以我在這裏再次尋求指導。
這是我一直在嘗試使用(和失敗)讓我的價格代碼和數量上面的步驟,我希望能複製它,使一對夫婦的調整來獲得下面的步驟:
SELECT MIN(TblPrices.stepquantity) AS QuantityAbove, MIN(TblPrices.StepPrice) AS PriceAbove, TblOrders.OrderID, TblOrders.OldOrderID, TblOrders.AccountID, TblOrders.OrderDate, TblOrders.RecipientID, TblOrders.OrderStatus, TblOrderDetail.DetailID, TblOrderDetail.Product, TblOrderDetail.Quantity
FROM (TblCountry INNER JOIN ((TblAccount INNER JOIN TblOrders ON TblAccount.AccountID = TblOrders.AccountID) INNER JOIN (TblOrderDetail INNER JOIN TblProducts ON TblOrderDetail.Product = TblProducts.ProductCode) ON TblOrders.OrderID = TblOrderDetail.OrderID) ON TblCountry.Code = TblAccount.Country) INNER JOIN (TblCountry AS CountryAliasForProduct INNER JOIN TblPrices ON CountryAliasForProduct.Code = TblPrices.CountryCode) ON TblProducts.ProductCode = TblPrices.Product
WHERE (StepQuantity >= TblOrderDetails.Quantity)
AND (TblPrices.CountryCode = TblAccount.Country)
AND (TblOrderDetail.Product = TblPrices.Product)
AND (DATEPART('yyyy', TblPrices.DateEffective) = DATEPART('yyyy', TblOrders.OrderDate));
我也試過... 我甚至嘗試回到基礎知識,並嘗試再次在1查詢中生成以下步驟,然後嘗試在另一個上面的步驟,最後,在另一個創建最終計算查詢。
這就是我一直在試圖讓我的價格和數量如下:
SELECT Max(StepQuantity) AS quantity_below, Max(StepPrice) AS price_below, TblOrderDetails.Quantity, TblAccounts.Country
FROM
(TblProducts INNER JOIN TblPrices ON TblProducts.ProductCode = TblPrices.Product)
(TblOrderDetail INNER JOIN TblProducts ON TblOrderDetail.Product = TblProducts.ProductCode)
(TblOrders INNER JOIN TblOrderDetail ON TblOrders.OrderID = TblOrderDetail.OrderID)
(TblAccount INNER JOIN TblOrders ON TblAccount.AccountID = TblOrders.AccountID),
WHERE (((TblPrices.StepQuantity)<=(TblOrderDetail.Quantity)) AND ((TblPrices.CountryCode)=([TblAccounts].[country])) AND ((TblPrices.Product)=([TblOrderDetail].[product])) AND ((DatePart('yyyy',[TblPrices].[DateApplicable]))=(DatePart('yyyy',[TblOrders].[OrderDate]))));
您可以看到這個明顯的錯誤,但我恐怕不能。我嘗試過重新調整它,但我無處可去。
我需要能夠將信息綁定到OrderDetail記錄,因爲生成的價格需要作爲借方金額添加到財務交易表中,並將顯示爲報表中的欠款額。
我真的不是很擅長SQL。我通過幾本自學書閱讀和工作,之前我曾問過這個問題的一部分;但我真的很掙扎着。如果任何人有任何關於如何繼續的想法,或者即使我的代碼出錯了,我也會很高興,即使你告訴我我不應該使用SQL。爲了記錄,我最初在Visual Basic下的其他論壇上發佈了這個問題。來自該論壇的迴應讓我感受到了SQL - 但是,任何有效的工作都會很好!
我甚至試過,使用Excel,串聯年度&產品&國家&數量得到一個唯一的產品代碼,內插的價格爲每個產品,國家和年份1和1000之間的所有數量和帶領他們進入一個TblProductsAndPrices表。在Access中,我創建了一個查詢來連接年(來自tblOrders的訂單日期)& Product(of tblorderdetails)& Country(of tblAccount),以獲得訂單所需的產品代碼。另一個查詢會爲我找到一個價格。但是,沒有出現在清單上的任何產品代碼(如數量未在tblProductsAndPrices中列出,因爲它大於最高價格增量)沒有價格。
如果有一個可行的解決方案,我剛纔所描述的將會產生一切的價格,那麼我會很高興。
我真的很希望能夠在任何日期爲任何國家的任何賬戶生成任何數量的任何產品訂單,並檢索將用於在數據庫中「借記」金融賬戶的價格,他們在賬戶的交易歷史中出現在報表上。我也希望能夠現場進行專門的價格檢查。
非常感謝您花時間閱讀本文。對此,我真的非常感激。如果你能提供任何幫助或鼓勵的話,我會非常感激。
非常感謝 卡倫
請不要用你的名字簽字,而且這是一個很長的職位需要? – 2015-03-18 22:03:09
感謝您的意見以賽亞。我會記住這一點。這是我在這裏的第一篇文章。 – 2015-03-18 22:53:55
卡倫(以賽亞似乎有一個糟糕的一天,對不起),我通常使用VBA這樣的任務 - 這意味着打開和搜索記錄集,如果可能找到值,繼續下一個任務,等等。你可以按照你的英語邏輯逐步建立。一系列的查詢可以成爲其中的一部分,但調試和維護更容易。 – Gustav 2015-03-19 09:03:08