2016-03-15 213 views
0
DECLARE @aracct VARCHAR(12) 
    SET @aracct = '49920813' 
DECLARE @item_no VARCHAR(12) 
    SET @item_no = '2319' 
SELECT tran_id, * FROM transactions 
    WHERE account = @aracct AND item_no = @item_no 
/*-----------Use if removing certain items from a check-----------*/ 
CREATE TABLE itemtable (items VARCHAR(6), account VARCHAR(12)) 
    INSERT INTO itemtable VALUES ('2299', @aracct) 
    INSERT INTO itemtable VALUES ('2300', @aracct) 
    --INSERT INTO @itemtable VALUES ('') 
DECLARE @tran_id_pmt VARCHAR(6) 
    SET @tran_id_pmt = '209413' 

SELECT I1.result - I2.result AS 'final result' 
FROM (SELECT SUM(amt_paid) AS result 
     FROM transactions 
     WHERE account = @aracct AND item_no = @item_no) AS I1 
JOIN (SELECT SUM(amt_paid) AS result 
     FROM transactions 
     WHERE account = @aracct AND item_no = (SELECT items FROM itemtable)) AS I2 
    ON (I1.account = I2.account) 

试图获得总和2选择语句,然后总结这2个语句,但我不断收到错误。有任何想法吗?总结两个总结语句

+0

你得到了什么错误? \t请阅读[**如何提问**](http://stackoverflow.com/help/how-to-ask) \t \t这里是[** START **]( http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)了解如何提高您的问题质量并获得更好的答案。 –

+0

那么现在它是说I1.account不是一个正确的列名称...我试着做transactions.account = itemtable.account,但它告诉我,它不能绑定 – Femmer

+0

你到底在哪里得到那个错误?在选择?你的数据库模式是什么? –

回答

0

您需要包括account你的子查询,所以你可以在ON条件

SELECT I1.result - I2.result AS 'final result' 
FROM (SELECT account, SUM(amt_paid) AS result 
      ^^^^^^^ 
     FROM transactions 
     WHERE account = @aracct AND item_no = @item_no 
     GROUP BY account) AS I1 
     ^^^^^^^^^^^^^^^^ 
JOIN (SELECT account, SUM(amt_paid) AS result 
     FROM transactions 
     WHERE account = @aracct AND item_no = (SELECT items FROM itemtable) 
     GROUP BY account) AS I2 
    ON (I1.account = I2.account) 
     ^^^^^^^^ 

使用它,你也可以用一个有条件的聚合解决它。

SELECT SUM(CASE WHEN item_no = @item_no THEN amt_paid 
             ELSE 0 
      END) 
     - 
     SUM(CASE WHEN item_no IN (SELECT items FROM itemtable) THEN amt_paid 
                   ELSE 0 
      END) AS 'final result'   
FROM Transactions 
WHERE account = @aracct 
+0

仍然是同样的错误。 (I1.account = I2.account)列名无效 – Femmer

+0

没有意义。再次检查是否有错别字。尝试先运行内部选择,然后检查列名。 –

+0

随着你给我的第二选择,它告诉我消息130,级别15,状态1,行19 无法对包含聚合或子查询的表达式执行聚合函数。 – Femmer