tags:

views:

138

answers:

2

I'm trying to make the result of one of my subqueries be used in another subquery but it doesn't work.

This is the query:

SELECT t.TenantName, 
    (SELECT SUM(Amount) 
     FROM tblTransaction 
     WHERE Amount > 0 
        AND TransactionDate >= '12/01/09' 
        AND TransactionDate <= '12/31/09'
        AND TenantID = t.ID 
        AND TransactionCode = trans.TransactionCode) AmountPaid, 
    (SELECT SUM(Amount) 
     FROM tblTransaction 
     WHERE tblTransaction.TransactionCode = trans.TransactionCode 
        AND tblTransaction.TenantID = t.ID) - AmountPaid AmountOwedTotal, 
    (SELECT SUM(Amount) 
     FROM tblTransaction 
     WHERE  tblTransaction.TransactionCode = trans.TransactionCode 
        AND tblTransaction.TenantID = t.ID
       AND Amount < 0 AND TransactionDate >= '12/01/09' 
        AND TransactionDate <= '12/31/09') AmountOwedThisMonth, 
   code.Description, trans.TransactionDate 
FROM tblTransaction trans 
   LEFT JOIN tblTenantTransCode code 
      ON code.ID = trans.TransactionCode
   LEFT JOIN tblTenant t 
      ON t.ID = trans.TenantID
WHERE trans.TransactionDate >= '12/01/09' 
   AND trans.TransactionDate <= '12/31/09' 
   AND trans.Amount > 0

Sorry it's so complicated.

Where I do (subquery) - AmountPaid the SqlServer complains AmountPaid isn't a valid column name. How can I get access to the result of it's subquery?

+1  A: 
SELECT  TenantName,
        Description,
        TransactionDate,
        AmountPaid,
        AmountRequired - AmountPaid AS AmountOwedTotal,
        AmountOwedThisMonth
FROM    (
        SELECT  t.TenantName,
                code.Description,
                trans.TransactionDate,
                (
                SELECT  SUM(Amount)
                FROM    tblTransaction
                WHERE   Amount > 0
                        AND    TransactionDate >= '12/01/09'
                        AND    TransactionDate <= '12/31/09'
                        AND    TenantID = t.ID
                        AND    TransactionCode = trans.TransactionCode
                ) AS AmountPaid,
                (
                SELECT  SUM(Amount)
                FROM    tblTransaction
                WHERE   tblTransaction.TransactionCode = trans.TransactionCode
                        AND    tblTransaction.TenantID = t.ID
                ) AS AmountRequired,
                (
                SELECT SUM(Amount)
                FROM   tblTransaction
                WHERE  tblTransaction.TransactionCode = trans.TransactionCode
                        AND    tblTransaction.TenantID = t.ID
                        AND    Amount < 0
                AND    TransactionDate >= '12/01/09'
                AND    TransactionDate <= '12/31/09'
                ) AS AmountOwedThisMonth,
        FROM    tblTransaction trans
        LEFT JOIN
                tblTenantTransCode code
        ON      code.ID = trans.TransactionCode
        LEFT JOIN       
                tblTenant t
        ON      t.ID = trans.TenantID
        WHERE   trans.TransactionDate >= '12/01/09'
                AND trans.TransactionDate <= '12/31/09'
                AND trans.Amount > 0
        ) q
Quassnoi
A: 

try this:

   Select t.TenantName, c.Description, tx.TransactionDate, 
     Sum(Case When TransactionDate Between '12/01/09' AND '12/31/09'
                   And Amount > 0
              Then tx.Amount Else 0 End) AmountPaid,
     Sum(tx.Amount) Total,
     Sum(tx.Amount) -  
     Sum(Case When TransactionDate Between '12/01/09' AND '12/31/09'
                   And Amount > 0
              Then tx.Amount Else 0 End) AnountOwed,
     Sum(Case When TransactionDate Between '12/01/09' AND '12/31/09'
                   And Amount < 0
              Then tx.Amount Else 0 End) AnountOwedThisMonth          
    FROM tblTransaction tx    
       LEFT JOIN tblTenantTransCode c 
          ON c.ID = tx.TransactionCode
       LEFT JOIN tblTenant t
           ON t.ID = tx.TenantID
    Group By t.TenantName, c.Description
Charles Bretana