1

注文をエクスポートしたことがない顧客のリストを取得する必要があります

CustomerNumbers のリストを渡し、それらを Orders に参加させてからグループ化しています。近いように感じますが、Orders.Exported が 1 に設定されていない Customers だけを取得する方法がわかりません。

これが私がこれまでに持っているものです:

SELECT Customers.CustomerID,
       Orders.Exported,
       Count(Orders.OrderID) AS OrderCount
FROM Customers WITH (Nolock)
JOIN Orders ON Customers.ManufacturerID = Orders.ManufacturerID
AND Customers.CustomerNumber = Orders.CustomerNumber
WHERE Customers.CustomerNumber IN (
  SELECT *
  FROM dbo.Split(REPLACE(@CustomerNumbers,'\',''),','))
  AND Customers.ManufacturerID=@ManufacturerID
  AND Customers.Source = 'ipad'
GROUP BY Customers.CustomerID,
         Orders.Exported

これにより、必要なものがほとんど得られます。これに対する私の結果は次のとおりです。

CustomerID  Exported    OrderCount
375408      NULL         1
375408      1            5
375412      1            2 
376892      NULL         1

したがって、このリストのうち、注文をエクスポートしたことがないため、376892 のみが必要です。

4

3 に答える 3

1

以前に注文をエクスポートした顧客を除外するために、 Having Min(IsNull(Orders.Exported,0)) with aを使用してグループ化Left Join削除できます。 Orders.Exported

論理的には、カウントは常に 0 になるため、カウントする必要はありません。

SELECT Customers.CustomerID, Min(IsNull(Orders.Exported,0)) Exported, Count(Orders.OrderID) As OrderCount
FROM Customers With (Nolock) LEFT JOIN Orders 
    ON Customers.ManufacturerID = Orders.ManufacturerID AND 
       Customers.CustomerNumber = Orders.CustomerNumber
WHERE Customers.CustomerNumber IN (
         SELECT colName FROM dbo.Split(REPLACE(@CustomerNumbers,'\',''),',')) AND 
         Customers.ManufacturerID=@ManufacturerID AND Customers.Source = 'ipad' 
GROUP BY Customers.CustomerID 
HAVING Min(IsNull(Orders.Exported,0)) = 0
于 2013-10-21T11:19:45.710 に答える
0
WHERE Customers.CustomerNumber IN (SELECT * FROM dbo.Split(REPLACE(@CustomerNumbers,'\',''),','))
    AND Customers.ManufacturerID=@ManufacturerID
    AND Customers.Source = 'ipad' 
    AND Orders.Exported is NuLL
于 2013-10-21T11:17:12.890 に答える