2012-06-19 2 views
1

У меня есть одно интересное требование для достижения. не могли бы вы помочь?
Вы можете найти таблицы нижеSQL to Join Two Tables with some business conditions

* * CheckingAccountTable (Предположим, что таблица Имя - CAT)

AccountNo TransactionId BalanceID  Balance1 
123   080    103    $30 
123   081    103    $20 
123   082    103    $10 
123   083    62    $0 
123   084    63    $0 
123   085    64    $0 
123   086    65    $0 
123   087    66    $0 
124   090    103    $3 
124   091    103    $2 
124   092    103    $1 
124   093    72    $0 
124   094    73    $0 
124   095    74    $0 
124   096    75    $0 
124   097    76    $0 

SavingsAccountTable (Предположим, что таблица Имя - SAT)

BalanceID Balance2 
103     $0 
62     $15 
63     $12 
64     $20 
65     $0 
66     $0 
72     $11 
73     $0 
74     $0 
75     $0 
76     $0 

результат должен СМОТРЕТЬ, КАК

AccountNo Count(TransactionId) Sum(Balance1+Balance2) 
123   6     107 
124   4     17 

Ok, здесь CAT главная таблица и СБ является суб стол, чтобы вернуть баланс я хочу узнать кол-TransactionID-х и Sum (Balance1 + Баланс 2)

условий. Если Balance1 ИЛИ Баланс 2 равен 0, я не могу взять TransactionID в кол

Am не в состоянии для того чтобы достигнуть его, выполнив ниже

SELECT T.AccountNo,Count(T.TransactionId), 
       SUM(T.Balance1 + T.Balance2) 'Stressdays' 
     FROM 
       (
        SELECT CAT.AccountNo,CAT.Balance1,CAT.BalanceID,CAT,TransactionId 
          ,CASE WHEN SAT.BalanceID= 103 THEN 
             0 
            ELSE 
             SAT.Balance2 
            END AS 'Balance2' 
        FROM CAT 
          INNER JOIN SAT ON CAT.BalanceID = SAT.BalanceID 
          WHERE CAT.Balance1 <> 0 
          AND  SAT.Balance2 <> 0 
       )T 
     GROUP BY T.AccountNo 
+0

Пожалуйста Descr ibe проблема, которую вы испытываете с вашим запросом? Это возвращает ошибку? Возвращает ли он неправильные результаты? –

+0

У меня проблемы с пониманием желаемого результата: как у вас может быть сумма (Balance1, Balance2) = 107 для AccountNo = 123? Для любой записи задействовано либо Balance1 = 0, либо Balance2 = 0, поэтому по вашему запросу оно должно быть нулевым ... Наверное, это моя ошибка, но я не понимаю ... – Marco

ответ

1

Попробуйте следующее:

SELECT CAT.AccountNo, 
     SUM(CASE WHEN CAT.Balance1 <> 0 OR ISNULL(SAT.Balance2,0) <> 0 THEN 1 ELSE 0 END) CountTransactionId, 
     SUM(CASE WHEN CAT.Balance1 <> 0 OR ISNULL(SAT.Balance2,0) <> 0 THEN CAT.Balance1+SAT.Balance2 ELSE 0 END) SumBalance1Balance2 
FROM CAT 
LEFT JOIN SAT 
ON CAT.BalanceId = SAT.BalanceId 
3

Если я понимаю ваши потребности, попробуйте это:

SELECT cat.AccountNo, Count(TransactionId), SUM(cat.Balance1+sat.Balance2) 
FROM cat INNER JOIN sat 
    ON cat.BalanceID = sat.BalanceID 
    AND (cat.Balance1 <> 0 OR sat.Balance2 <> 0) 
GROUP BY cat.AccountNo 
1
SELECT C.AccountNo,Count(C.TransactionId) AS [Count(TransactionId)], 
    SUM(C.Balance1 + S.Balance2) AS [Sum(Balance1+Balance2)] 
FROM SO_CAT C 
JOIN SO_SAT S ON S.BalanceID = C.BalanceID-- AND S.BAlance2 <> 0 
WHERE C.BALANCE1 <> 0 OR S.BALANCE2 <> 0 
GROUP BY C.ACCOUNTNO