2009-12-22 73 views
3

我试图使我的一个子查询的结果在另一个子查询中使用,但它不起作用。使用子查询结果作为查询变量

这是查询:

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不是有效的列名称。我怎样才能访问它的子查询的结果?

回答

4
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

试试这个:

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