我正在嘗試將事務數據清理並滿足我的分析需求。如何將事務記錄到數據庫中有一些限制,並且我試圖解決這些限制。For SQL在SQL Server中 - 這是正確的邏輯?
當客戶下訂單超過1個產品時,交易數據庫不會將多個產品鏈接在一起。每個產品都有唯一的銷售ID,但無法將多個銷售ID分組爲一個訂單。以下是一個示例:
OrderID MultOrderID CustomerID SalesDate SalesTime ProductID ProductCost ShippingCost
6082346 7661X0A 2012-06-12 959 105 99.99 7.95
6082347 5809812YY6Y T891002 2012-06-12 1005 222 99.95 7.95
6082348 5809812YY6Z T891002 2012-06-12 1005 273 22.95 1.00
6082349 5809812YY71 T891002 2012-06-12 1005 285 499.95 1.00
6082350 5809812YY72 T891002 2012-06-12 1005 172 49.95 1.00
6082351 5809812YY73 T891002 2012-06-12 1005 105 99.99 7.95
6082352 5809812YY74 X637251 2012-06-12 1010 285 499.95 7.95
6082353 5809812YY75 X637251 2012-06-12 1010 30 1024.99 1.00
6082354 T512AT0 2012-06-12 1017 172 49.95 7.95
此交易系統的其他限制是它不能將多於4個的產品一起裝運。如果客戶訂購了5種產品,4種產品一起發貨(並收取1運費),剩餘的產品單獨發貨並收取另一運費(是的,整個企業希望重建這整個遺留系統... )。
我試圖確定的是每件訂單的產品數量以及總產品成本和運輸成本。
如果您查看MultOrderID的最後4個字符,您會看到它是順序的,YY6Y變成YY6Z,然後轉到YY71,YY72。邏輯是標準化的 - 我知道如果CustomerID,SalesDate和SalesTime是相同的,那麼我可以將產品配對在一起。我不知道的是如何才能做到這一點。
我相信實現這個目標的方法是通過CustomerID,SalesDate和SalesTime分解訂單。然後,我得到一個for-loop
,或類似的東西來循環通過各個條目。然後,我查找MultOrderID的最後4個字符,並說 - 如果1,2和3是相同的,並且第4個字符在前一個順序的第4個字符之後,則將它們組合在一起,最多4個順序。如果訂單ID是範圍內的第5到第8個訂單,那麼這是裝運2等。
這可以在SQL Server
完成嗎?如果不是這樣,我應該寫什麼?這是我應該在這種情況下使用的for-loop
?
編輯:這是我想要得到的輸出。請記住,在第四個產品發貨後,我需要重新開始訂購(所以,有6個產品分成2個發貨[4個產品和2個產品],9個產品分成3個發貨[4,4和1]
PRODUCTSSHIPPED SALESDATE SALESTIME CUSTOMERID PRODUCTCOST SHIPPINGCOST
4 6/12/12 1005 T891002 672.8 10.95
1 6/12/12 1005 T891002 99.99 7.95
2 6/12/12 1010 X637251 1524.94 8.95
1 6/12/12 1017 T512AT0 49.95 7.95
1 6/12/12 959 7661X0A 99.99 7.95
感謝迄今爲止的答案 - 我認爲我需要的原因循環是我需要在4產品後創建新的貨物。我猜'CASE'會有足夠的邏輯,但稍後會嘗試。 – mikebmassey
不確定是否通知您更新答案時,但我已更新我的 - 應該是您需要的 – Charleh