2012-01-19 3 views
2

중첩 된 선택에서 작동하는 CASE 문을 가져 오는 데 문제가 있습니다. 나는 가깝다고 생각하지만 문법을 제대로 이해할 수는 없다. 지금까지 나는 시도했다 : 또한중첩 선택의 케이스

SELECT l.*, 
Credit = (
CASE WHEN ISNULL(M.POSTCODE,'') <> '' THEN 
    sum(Credit) from Balance cb Where LEFT(LTrim(cb.AccountHolder),4) LIKE LEFT(LTrim(m.Company),4) 
ELSE 
sum(Credit) from Balance cb Where LEFT(LTrim(cb.AccountHolder),4) LIKE LEFT(LTrim(m.Company),4) 
END 
) 
FROM live l INNER JOIN master m on m.ClientID = L.ClientID 
WHERE ClientID = 12345 

과 :

http://msdn.microsoft.com/en-us/library/ms181765.aspx에서 MSDN 예제와 일치하는 것 같다
SELECT l.*, 
(SELECT 
CASE WHEN ISNULL(M.POSTCODE,'') <> '' THEN 
    sum(Credit) from Balance cb Where LEFT(LTrim(cb.AccountHolder),4) LIKE LEFT(LTrim(m.Company),4) 
ELSE 
sum(Credit) from Balance cb Where LEFT(LTrim(cb.AccountHolder),4) LIKE LEFT(LTrim(m.Company),4) 
END 
) AS Credit 
FROM live l INNER JOIN master m on m.ClientID = L.ClientID 
WHERE ClientID = 12345 

. 내가 놓친 게 있니?

+1

THEN과 ELSE 분기가 동일하므로 CASE를 제거하면됩니다. ;-) – Heinzi

+0

THEN/ELSE와 ELSE/END 간의 두 코드 스 니펫이 동일하게 나타 납니까? 그 외에는 하위 쿼리에서'()'와 SELECT가 필요합니다. * (@ptfaulkner 응답과 많이 비슷합니다) *'(SELECT SUM (신용) FROM balance WHERE ...) ' – MatBailie

+0

>> 중첩 된 선택에서 작동하도록 CASE 문을 가져 오는 데 문제가 있습니다. << 어떤 문제가 있습니까? 오류 또는 경고? –

답변

1

여러분은 sum 서브 쿼리 전에 select를 추가해야한다고 생각합니다.

SELECT l.*, 
Credit = (
    CASE WHEN ISNULL(M.POSTCODE,'') <> '' THEN 
    (SELECT sum(Credit) from Balance cb Where LEFT(LTrim(cb.AccountHolder),4) LIKE LEFT(LTrim(m.Company),4)) 
    ELSE 
    (SELECT sum(Credit) from Balance cb Where LEFT(LTrim(cb.AccountHolder),4) LIKE LEFT(LTrim(m.Company),4)) 
    END 
) 
FROM live l 
    INNER JOIN master m on m.ClientID = L.ClientID 
WHERE ClientID = 12345 

당신의 선택의도 정확히 같은, 그래서 그들을 다르게 당신이 의도하지 않는 한 물론 경우에 대한 필요가 전혀 없습니다.

+1

그리고 상관 된 하위 쿼리 주위에'()'. – MatBailie

+0

감사합니다. – Echilon

0
SELECT l.*, 
     CASE 
     WHEN ISNULL(M.POSTCODE,'') <> '' THEN 
      (SELECT sum(Credit) 
      from Balance cb 
      Where LEFT(LTrim(cb.AccountHolder),4) LIKE LEFT(LTrim(m.Company),4)) 
     ELSE 
      (SELECT sum(Credit) 
      from Balance cb 
      Where LEFT(LTrim(cb.AccountHolder),4) LIKE LEFT(LTrim(m.Company),4)) 
     END as 'Credit' 
FROM live l INNER JOIN master m 
     on m.ClientID = L.ClientID 
WHERE ClientID = 12345