2014-09-23 3 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

. 기본적으로

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 서버에 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) 

합니다. 당신은 당신이 도관의 대답과 case 문을 사용할 수 원하는 것을 들어

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)