2014-09-23 62 views
0

我有一個SQL Server數據庫。我的數據庫有兩個表:在SQL Server中執行條件連接

Customer    Order 
--------    ----- 
ID (int)    ID (int) 
Name     CustomerID (int) 
EmailAddress   

當我查詢這些表,我可能有一個orderID。如果我有訂單ID,我想要返回與其關聯的客戶。如果我沒有訂單ID,或者如果它等於0,我想要返回所有客戶。爲了做到這一點,我寫了以下查詢:

SELECT 
    o.[ID] 
FROM 
    [Order] o 
WHERE 
    o.[ID][email protected] 

該查詢返回所有OrderID的訂單。但是,我不知道如何執行我的條件查詢。這在SQL Server中甚至可能嗎?如果是這樣,怎麼樣?

回答

0

對於你想要的,你可以用Conduit的答案使用case聲明。基本上

CASE 
    WHEN @orderid = 0 OR @orderid IS NULL 
    SELECT * from Customer 
    ELSE 
    select c.* 
    from Customer c 
     inner join order o 
     on c.ID = o.CustomerID 
    where o.orderID = @orderID 
END; 

它可能不是確切的,我不是在安裝了Sql Server的盒子上。

0

您可以使用SQL Server COALESCE實現它 -

SELECT c.* 
FROM customer c 
WHERE c.Id IN (
     SELECT o.[CustomerID] 
     FROM [Order] o 
     WHERE o.[ID] = COALESCE(@orderID, o.[ID]) 
     ) 
0

我能想到的幾個方法可以做到這一點:

SELECT * 
FROM Customer 
WHERE CustomerID = coalsece((select TOP 1 customerID from Orders WHERE OrderId= @OrderID), CustomerID) 

With CustomerOrders As (
    SELECT CustomerID, ID as OrderID 
    FROM Orders 
    WHERE OrderID = @OrderID 
) 
SELECT DISTINCT c.* 
FROM Customer c 
INNER JOIN CustomerOrders co ON c.ID = coalesce(co.CustomerID, c.ID)