AGGREGATE函数下多个SELECT子查询中的语法错误

时间:2014-01-20 08:18:56

标签: sql sql-server subquery aggregate-functions

我正在尝试使用聚合函数,其中包含子查询。在我对SQL构造的理解中。我想出了这个。但它说语法错误。任何人都可以帮我重建声明吗? INNER JOIN子句的原始内容很长,所以我只是将它们删除了,因为聚合函数的部分只是它的一部分。感谢

SELECT CCompany,
       COUNT(SELECT * FROM Table1 WHERE (CPaymentAmount<CFinalTotal and CStatus='Shipped')) as UnpaidTransactionCount,
       COUNT(SELECT * FROM Table1 WHERE (CPaymentAmount=CFinalTotal and CStatus='Shipped')) as PaidTransactionCount,
       SUM(SELECT CFinalTotal FROM Table1 WHERE (CPaymentAmount<CFinalTotal and CStatus='Shipped')) as UnpaidTotal,
       SUM(SELECT CPaymentAmount FROM Table1 WHERE (CPaymentAmount<CFinalTotal and CStatus='Shipped')) as PartialPayment 
       FROM Table1 
       WHERE CStatus='Shipped'

它表示'SELECT'和'as'附近的语法错误。基本上我正在尝试计算未支付和支付的交易,然后总结一切以获得平衡。使用我的脚本语言解决平衡问题。感谢。

2 个答案:

答案 0 :(得分:3)

我认为你只需要:

SELECT CCompany,
   SUM(CASE WHEN CPaymentAmount<CFinalTotal THEN 1 ELSE 0 END) as UnpaidTransactionCount,
   SUM(CASE WHEN CPaymentAmount=CFinalTotal THEN 1 ELSE 0 END) as PaidTransactionCount,
   SUM(CASE WHEN CPaymentAmount<CFinalTotal THEN CFinalTotal ELSE 0 END) as UnpaidTotal,
   SUM(CASE WHEN CPaymentAmount<CFinalTotal THEN CPaymentAmount ELSE 0 END) as PartialPayment 
FROM Table1 
WHERE CStatus='Shipped'
GROUP BY CCompany

除非您认为需要子查询的原因。它们似乎都在同一张桌子上,虽然你的子查询与CCompany没有关联,但我冒昧地期望你想要一个公司的结果。

如果这不是您的目标,那么一些样本数据和预期结果将非常受欢迎。

答案 1 :(得分:0)

内部语句将为您提供所有列,如您提到的select * statement。您不能将count与内部查询的结果一起使用。

检查声明。