2014-09-23 69 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)