2

ネストされたselectで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の例と一致しているようです。私は何かが足りないのですか?

4

2 に答える 2

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

選択したものもまったく同じなので、もちろん異なることを意図していない限り、ケースは実際には必要ありません。

于 2012-01-19T13:21:39.357 に答える
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
于 2012-01-19T13:27:31.740 に答える