我正在尝试使用聚合函数,其中包含子查询。在我对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'附近的语法错误。基本上我正在尝试计算未支付和支付的交易,然后总结一切以获得平衡。使用我的脚本语言解决平衡问题。感谢。
答案 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与内部查询的结果一起使用。
检查声明。