2015-01-15 40 views
0

我使用4臺獲得許多送貨地址一個訂單號

  • 客戶
  • CUSTOMER_ORDER
  • CUST_ORDER_LINE
  • CUST_ADDRESS

我使用內部連接到鏈接表。 CUSTOMER通過customer_ID鏈接到CUSTOMER_ORDERCUST_ADDRESS,並且CUSTOMER_ORDER_LINE通過order_ID鏈接到CUSTOMER_ORDER。 Order_ID不出現在CUSTOMERCUST_ADDRESS表中。

當我運行下面的查詢時,我得到了該特定客戶和訂單編號的所有送貨地址。

例如,經銷商有25個可能的送貨地址,但他們一次只能將一個訂單發送到一個送貨地址。我的查詢是爲每個地址帶回一個訂單號碼25次。任何建議都會很棒。謝謝。

SELECT DISTINCT TOP (100) PERCENT dbo.CUSTOMER_ORDER.ID, 
    dbo.CUSTOMER.NAME, 
    dbo.CUST_ORDER_LINE.PART_ID, 
    dbo.CUST_ORDER_LINE.ORDER_QTY, 
    dbo.CUSTOMER_ORDER.STATUS, 
    dbo.CUSTOMER_ORDER.SHIPTO_ID, 
    dbo.CUST_ADDRESS.NAME AS Expr1 
FROM dbo.CUSTOMER 
    INNER JOIN dbo.CUSTOMER_ORDER 
     ON dbo.CUSTOMER.ID = dbo.CUSTOMER_ORDER.CUSTOMER_ID 
    INNER JOIN dbo.CUST_ORDER_LINE 
     ON dbo.CUSTOMER_ORDER.ID = dbo.CUST_ORDER_LINE.CUST_ORDER_ID 
    INNER JOIN dbo.CUST_ADDRESS 
     ON dbo.CUSTOMER.ID = dbo.CUST_ADDRESS.CUSTOMER_ID 
WHERE  (dbo.CUSTOMER_ORDER.ORDER_DATE > '1/1/2014') 
    AND (dbo.CUSTOMER_ORDER.ID NOT LIKE 'RMA%') 
GROUP BY dbo.CUSTOMER_ORDER.ID, 
    dbo.CUSTOMER.NAME, 
    dbo.CUST_ORDER_LINE.PART_ID, 
    dbo.CUST_ORDER_LINE.ORDER_QTY, 
    dbo.CUSTOMER_ORDER.STATUS, 
    dbo.CUSTOMER_ORDER.SHIPTO_ID, 
    dbo.CUST_ADDRESS.NAME 
ORDER BY dbo.CUSTOMER_ORDER.ID 
+0

如果客戶有25個地址可以發貨,我怎麼知道某個訂單應該發往哪個地址? – Becuzz 2015-01-15 18:07:10

+0

每個地址都有一個shipto_ID,每個分銷商都有一個客戶編號。兩者的結合是獨一無二的。有時訂單會直接發送給經銷商,否則將直接發貨給最終客戶。我們的主級分銷商可能有超過1,000個地址。在我們的ERP軟件中,到達和發貨地址的賬單在訂單輸入屏幕上並鏈接到訂單號。 – Ian 2015-01-15 18:17:15

+0

那麼你可以根據訂單shipto_id字段加入地址表嗎?另外,你爲什麼要做一個小組?似乎沒有需要(或者我只是想念一些東西)。 – Becuzz 2015-01-15 18:27:50

回答

0

作爲一個在黑暗中拍攝似乎你的查詢應該是這樣的。

SELECT 
    co.ID, 
    c.NAME, 
    col.PART_ID, 
    col.ORDER_QTY, 
    co.STATUS, 
    co.SHIPTO_ID, 
    ca.NAME AS Expr1 
FROM dbo.CUSTOMER c 
    INNER JOIN dbo.CUSTOMER_ORDER co ON c.ID = co.CUSTOMER_ID 
    INNER JOIN dbo.CUST_ORDER_LINE col ON co.ID = col.CUST_ORDER_ID 
    INNER JOIN dbo.CUST_ADDRESS ca ON co.SHIPTO_ID = ca.CUSTOMER_ID --this is now joining to the order table. 
WHERE co.ORDER_DATE > '2014-01-01' 
    AND co.ID NOT LIKE 'RMA%' 
GROUP BY co.ID, 
    c.NAME, 
    col.PART_ID, 
    col.ORDER_QTY, 
    co.STATUS, 
    co.SHIPTO_ID, 
    ca.NAME 
ORDER BY co.ID 

注意如何使用別名使這看起來更清潔。我還更改了字符串日期以使用通用格式。無論您的DATEFORMAT設置如何,這都可以工作。

+0

我重複了上面的查詢,但它不會執行。沒有錯誤消息出現,但沒有數據返回。別名確實幫助順便說一句。 – Ian 2015-01-15 21:34:18

+0

我看不到你的數據,所以我在這裏幫不了什麼忙,但是可能把CUST_ADDRESS的內部連接改爲左連接? – 2015-01-15 21:35:29

+0

問題與CUST_ORDER_LINE表和CUST_ADDRESS表在兩者之間沒有公共字段有關嗎? cust_order_line表僅通過訂單#鏈接到customer_order表,該表不在其他表中。我能否在設計窗格中向您發送圖表的屏幕截圖?這會有幫助嗎? – Ian 2015-01-15 22:04:14

相關問題