0

私はいくつかのテーブルを持っています。注文がなかった日付を教えてくれるクエリを書きたいだけです。左結合を使用してnullの結果を取得していますが、問題は次のとおりです。これを使用した後、日付を取得できません。

私を助けてください、私のコードはこのようなものです:

SELECT DAY(o.OrderDate) AS 'HavntRecivedOrder'
  FROM Products p
 INNER JOIN Suppliers sup   ON p.SupplierID = sup.SupplierID
 INNER JOIN OrderDetails od ON p.ProductID = od.ProductID
  LEFT JOIN Orders o        ON (od.OrderID = o.OrderID
                                AND o.OrderDate BETWEEN '1/1/1997' AND '1/31/1997')
 WHERE sup.CompanyName='Tokyo Traders'
   AND o.OrderDate IS  NULL
4

1 に答える 1

0

問題をよりよく理解するために、必要なテーブル構造を投稿してください。

それにもかかわらず、あなたの質問の説明から、注文が投稿されない日が必要であることがわかりますよね?それでは、なぜそんなに複雑なクエリを書いているのかわかりません。多分これを行うには十分です...編集済み...

Orders テーブルに SupplierID 列がある場合

DECLARE @firstdate DATETIME='19970101 00:00:00', 
        @lastdate DATETIME= '19970131 00:00:00'
DECLARE @datetable TABLE (auxDate DATE)

;WITH CTE_DatesTable
  AS
  (
    SELECT @FirstDate AS auxDate
    UNION ALL
    SELECT DATEADD(dd, 1, auxDate)
    FROM CTE_DatesTable
    WHERE DATEADD(dd, 1, auxDate) <= @LastDate
  )
  INSERT INTO @datetable ([auxDate])
  SELECT [auxDate] FROM CTE_DatesTable
  OPTION (MAXRECURSION 0);

SELECT auxDate AS 'HavntRecivedOrder'
      FROM @datetable auxTB
     WHERE DAY(auxTB.auxDate) NOT IN (SELECT DAY(OrderDate)
                                   FROM Orders, Supplier
                                  WHERE OrderDate = BETWEEN @firstdate AND @lastdate
                                    AND Supplier.SupplierID = Orders.SupplierID)
于 2012-07-25T09:20:24.350 に答える