2014-01-28 77 views
-2

我已經被賦予查找哪些客戶在6個月內沒有從我們這裏購買且沒有未完成的銷售訂單的任務。在6個月內沒有購買並且沒有未完成的銷售訂單的客戶

的信息包含在兩個表: 客戶和銷售

的客戶數量是常見的兩個表,我需要去拉客戶編號和名稱 客戶表中有一個發票日期,所以我可以看看爲此,銷售表具有狀態列,其中包括已關閉和打開狀態以及日期列印列。

我相信這是我需要把它放在一起,但我很難過。

對不起,我想我沒有解釋得很清楚。我知道會寫類似的東西。

Select Distinct I.Customer, 
    I.InvoiceToName 
From 
    tblarInvoice I 
    Inner Join tblsoSO S 
    On I.CustomerShipTo = S.CustomerShipTo 

    Where max(I.dateprinted) <= '06/01/2013' 
    or max(S.dateordered) <= '06/01/2013' 
    and S.status = 'closed' 

,因爲我認爲我會得到所有記錄回到剛開始的時候,我只需要那些沒有在過去6個月下令上面是行不通的。更不用說Where語句中的聚合問題了。我知道哪些是行不通的,但不知道如何做工,即使它是我想要的。

所以我難以接受6個月前沒有訂單的情況。

+4

你試過形成一個查詢?如果是這樣,你可以發佈該查詢,以便我們可以進一步幫助? – j03z

+0

再次閱讀您的要求後,我想檢查;您需要「......我們的客戶在6個月內沒有從我們那裏購買,也沒有任何未完成的銷售訂單。」 - 這是否意味着您可以有一位6個月前訂購的顧客,訂單仍然「開放」? – Tony

+0

正確的是,這將是一個可以返回多達一年的全面訂單的客戶。這就是我檢查S.status的原因。如果S.status已打開,那麼我不想將客戶包含在結果集中。 – user3246538

回答

1

做一點「思考」,這應該可以幫助你建立一些查詢。

您有一套customers和一套sales。這些交集是customers誰買了你的產品;加入這些表來找出他們是誰。

另一個要求是他們有'沒有未完成的訂單'。您說status字段告訴您訂單是否「打開」,因此這將構成您的WHERE子句的一部分,以過濾銷售行。

看看是否讓你開始,嘗試一些東西,如果你在發佈查詢後停滯不前,並尋求關於特定問題的幫助。此刻的你只是要求人們編寫查詢你:)

編輯:

看着你已經添加有什麼您最初說了一些不一致的查詢。

你提到CustomerSales表,但使用的是tblarInvoice(發票?)tblsoSO(sales_order的?)。我將簡化問題並假設關於訂單的所有信息都在一張表中Sales_Order;您可以修改查詢以使用您擁有的實際表格。

您需要定義「過去6個月未訂購」的實際含義。你有兩個帶日期的字段;我假設date_ordered必須超過6個月前,並忽略dateprinted,因爲這聽起來像稍後發生的事情。

我們可以利用DATEDIFF扣除6個月的當前日期,所以每當您運行查詢,你會得到一個「滾動」最近6個月:

SELECT customer 
FROM Sales_Order 
WHERE date_ordered <= DATEADD(month, -6, CURRENT_TIMESTAMP) 

你也想將一組客戶排除任何具有「開放」訂單的人:

SELECT DISTINCT 
     SO1.customer 
FROM (SELECT customer 
      FROM  Sales_Order 
      WHERE  order_status = 'closed' 
     ) SO1 
     LEFT JOIN (SELECT customer 
        FROM Sales_Order 
        WHERE order_status = 'open' 
       ) SO2 ON SO1.customer = SO2.customer 
WHERE SO2.customer IS NULL 

現在將其與最近6個月未訂購的客戶組合在一起。 BTW我並不是說這是編寫查詢最好辦法,我只是試圖更容易理解:

SELECT DISTINCT 
     SO1.customer 
FROM (SELECT customer 
        ,date_ordered 
      FROM  Sales_Order 
      WHERE  order_status = 'closed' 
     ) SO1 
     LEFT JOIN (SELECT customer 
        FROM Sales_Order 
        WHERE order_status = 'open' 
       ) SO2 ON SO1.customer = SO2.customer 
WHERE SO2.customer IS NULL 
     AND date_ordered <= DATEADD(month, -6, CURRENT_TIMESTAMP) 
+0

我將我的查詢添加到了我原來的帖子中。 @ jO3z – user3246538

相關問題