2015-01-15 108 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

相关问题