2016-12-03 32 views
-5

我有兩個表:客戶和訂單。SQL查詢使用AND或

我需要知道哪些客戶在給定月份內訂購了「麪包」AND(牛奶或冰淇淋)。

我該如何編寫SQL查詢?

謝謝。

+0

請看http://www.w3schools.com/Sql/sql_and_or.asp上的「與AND和OR」在這裏,谷歌的想法。 –

+4

您至少需要共享表結構。並分享您迄今爲止所嘗試的內容。這是SO的工作原理。 –

+1

「麪包」AND(牛奶或冰淇淋)在邏輯上如何編寫它 –

回答

0

正如其他人在評論中所說的,你應該真的嘗試改善你的問題,讓人們更傾向於回答和幫助你。

設置一些測試數據(使你的架構假設):

CREATE TABLE Customers (
    CustomerID INT, 
    CustomerName VARCHAR(50) 
) 

CREATE TABLE Orders (
    OrderId INT, 
    OrderDate DATETIME, 
    CustomerID INT, 
    Product VARCHAR(50) 
) 

INSERT INTO Customers 
SELECT 1, 'John Smith' 
UNION 
SELECT 2, 'Jane Doe' 
UNION 
SELECT 3, 'Rachel Booth' 
UNION 
SELECT 4, 'Steve Barnes' 
UNION 
SELECT 5, 'Nancy Green' 
UNION 
SELECT 6, 'Phil Jones' 

INSERT INTO Orders 
SELECT 1, '2016-09-01', 1, 'Bread' 
UNION 
SELECT 2, '2016-09-10', 3, 'Milk' 
UNION 
SELECT 3, '2016-09-19', 1, 'Milk' 
UNION 
SELECT 4, '2016-10-07', 4, 'Bread' 
UNION 
SELECT 5, '2016-10-13', 2, 'Milk' 
UNION 
SELECT 6, '2016-10-15', 4, 'Milk' 
UNION 
SELECT 7, '2016-10-19', 6, 'Milk' 
UNION 
SELECT 8, '2016-10-21', 6, 'Ice Cream' 
UNION 
SELECT 9, '2016-10-27', 1, 'Milk' 
UNION 
SELECT 10, '2016-10-28', 4, 'Milk' 
UNION 
SELECT 11, '2016-11-06', 5, 'Ice Cream' 
UNION 
SELECT 12, '2016-11-09', 5, 'Bread' 

,並設置所需的月檢查:

DECLARE @Month DATETIME 
SET @Month = '2016-09-01' 

我會得到適合您的邏輯類似客戶名單這個:

SELECT DISTINCT c.CustomerName 
FROM Customers c 
JOIN Orders ob ON ob.CustomerID = c.CustomerID 
JOIN Orders omi ON omi.CustomerID = c.CustomerID 
WHERE ob.Product = 'Bread' 
AND omi.Product IN ('Milk','Ice Cream') 
AND DATEADD(month, DATEDIFF(month, 0, ob.OrderDate), 0) = DATEADD(month, DATEDIFF(month, 0, omi.OrderDate), 0) 
AND DATEADD(month, DATEDIFF(month, 0, ob.OrderDate), 0) = @Month