获取一个订单号的许多送货地址

时间:2015-01-15 17:58:42

标签: sql-server-2008

我使用4张桌子

  • CUSTOMER
  • 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

1 个答案:

答案 0 :(得分: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设置如何,这都将有效。