2012-01-19 13 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 

も:

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 

http://msdn.microsoft.com/en-us/library/ms181765.aspxでMSDNの例に一致するように思われます。何か不足していますか?

+1

THENとELSEブランチが等しいので、CASEを削除できます。 ;-) – Heinzi

+0

THEN/ELSEとELSE/ENDの2つのコードスニペットは同じように見えますか?それ以外のものはサブクエリで '()'と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 
関連する問題