2009-10-05 4 views
0

아래의 Linq 쿼리처럼 작동해야하는 SQL 문을 작성하려고합니다. 주로 특정 조건 (Type == "Check")에 따라 하나의 열 (Value * Quantity)에서 두 개의 열 (Cash 및 Check)을 합산하려고합니다. 따라서 Type이 "Check"이면 Check 열에 값을 넣고 그렇지 않으면 Cash 열에 값을 넣습니다.당신은 Linq에서 그것을 할 수 있다면 SQL에서 항상 뭔가를 할 수 있습니까?

Linq에 :

from ac in m_DataContext.acquisitions 
join ai in m_DataContext.acquireditems on ac.Identifier equals ai.AcquisitionIdentifier 
group ai by ac.SessionIdentifier into g 
select new 
{ 
    SessionIdentifier = g.Key, 
    Cash = g.Where(ai => ai.Type != "Check").Sum(ai => (double?)ai.Value * (int?)ai.Quantity) ?? 0, 
    Check = g.Where(ai => ai.Type == "Check").Sum(ai => (double?)ai.Value * (int?)ai.Quantity) ?? 0, 
    CheckQuantity = g.Where(ai => ai.Type == "Check").Sum(ai => (int?)ai.Quantity) ?? 0 
}; 

SQL :

SELECT a.SessionIdentifier, a.Checks as CheckQuantity, ???? as Cash, ???? as Check 
FROM Acquisitions ac 
INNER JOIN AcquiredItems ai ON ai.AcquisitionIdentifier = ac.Identifier 
GROUP BY a.SessionIdentifier 

이 가능합니까?

답변

2

당신은 이런 식으로 작업을 수행 할 수 있습니다

select sum(case when type = 'cash' then Value * Quantity else 0 end) as Cash, 
    sum(case when type = 'check' then Value * Quantity else 0 end) as Check 
from ... 
+1

을 이것은 MS SQL2005이며 또한 PIVOT 키워드 http://msdn.microsoft.com/en-us/library/ms177410를 사용할 수 위의 경우. aspx –

관련 문제