среда, 27 марта 2013 г.

Найти дату, когда отгружался только товар с номером 777

-- Выберем все даты. При помощи подзапроса, отберем для даты список, отгруженных товаров, если в списке только 777 -- эта дата попадет в результирующий набор

DECLARE @PID AS INT = 777;

SELECT
    DISTINCT CAST (O.ShipDate AS DATE) AS ShipDate
FROM AdventureWorks2012.Sales.SalesOrderHeader AS O
WHERE
    @PID = ALL
    (
         SELECT OD.ProductID
         FROM AdventureWorks2012.Sales.SalesOrderDetail AS OD
             INNER jOIN
         AdventureWorks2012.Sales.SalesOrderHeader AS OH
         ON OD.SalesOrderID = OH.SalesOrderID
         AND OH.ShipDate = O.ShipDate
    )

-- Получилась дата - '2005-11-07'

GO

-- Сделаем проверку

DECLARE @DT DATE = '2005-11-07'
SELECT OD.ProductID
FROM AdventureWorks2012.Sales.SalesOrderDetail AS OD
    INNER jOIN
AdventureWorks2012.Sales.SalesOrderHeader AS OH
ON OD.SalesOrderID = OH.SalesOrderID
AND DATEDIFF(DAY, OH.ShipDate, @DT) = 0

-- Только товар с номером 777!