2012-01-19 4 views
2

У меня возникли проблемы с получением инструкции CASE для работы во вложенном элементе. Я думаю, что я близок, но я не могу правильно получить синтаксис. До сих пор я пытался:Case in inested select

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 

А также:

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 

который, кажется, совпадают с примерами MSDN на http://msdn.microsoft.com/en-us/library/ms181765.aspx. Я что-то упускаю?

+1

Поскольку ваши THEN и ваша ветка ELSE равны, вы можете просто избавиться от CASE. ;-) – Heinzi

+0

Ваши два кода снайпера betwen THEN/ELSE и ELSE/END появляются одинаково? Кроме того, вам просто нужны '()' 's и SELECT в ваших подзапросах ... * (Как и ответ @ptfaulkner) *' (SELECT SUM (кредит) FROM Balance WHERE ...) ' – MatBailie

+0

>> У меня возникли проблемы с получением инструкции CASE для работы во вложенном элементе. << Какие проблемы у вас есть? Любые ошибки или предупреждения? –

ответ

1

Я думаю, вам нужно добавить некоторые варианты перед суммированием подзапросов.

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