Использование результатов подзапроса в качестве переменной запроса - PullRequest
3 голосов
/ 22 декабря 2009

Я пытаюсь сделать так, чтобы результат одного из моих подзапросов использовался в другом подзапросе, но он не работает.

Это запрос:

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

Извините, что это так сложно.

Где я делаю ( подзапрос ) - AmountPaid SqlServer жалуется, что AmountPaid не является допустимым именем столбца Как я могу получить доступ к результату его подзапроса?

Ответы [ 2 ]

4 голосов
/ 22 декабря 2009
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
0 голосов
/ 22 декабря 2009

попробуйте это:

   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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...