2016-01-14 59 views
3

我正在尝试编写一个脚本,该脚本将返回每个公司和总计的chk_amount总计。我遇到的问题是,如果支票是无效的,那么将其作为信用量返还,如果没有按原样返还。 chk_amount中的所有值都是正数。SQL:根据另一列中的值将金额转换并计算为负值

我得到一个错误,即void在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。有什么建议么?我希望输出的是company_name和金额。

这是代码;

SELECT company_name = CASE GROUPING(company_name) WHEN 1 THEN 'Total' ELSE company_name END, 
    CASE WHEN void = 'Y' 
      THEN FORMAT(sum(chk_amount * (-1)), 'C', 'en-us') 
      ELSE FORMAT(sum(chk_amount), 'C', 'en-us') 
       END AS amount 
from payments 

INNER JOIN company_list on payments.company_no = company_list.company_id 

where CONVERT(varchar(10),date_last_modified,101) = '1/13/2016' 

Group by ROLLUP(company_name) 

预先感谢您!

+2

你的CASE语句需要去的总和,而不是其他的方式中。 – Rabbit

回答

1

您需要void由这种方式添加到组 - >组由ROLLUP(COMPANY_NAME,无效)

0
SELECT CASE GROUPING(company_name) WHEN 1 THEN 'Total' ELSE company_name END As Company_Name 
    , FORMAT(SUM(chk_amount * CASE WHEN void = 'Y' THEN -1 ELSE 1 END), 'C', 'en-us') As amount 
FROM payments 
INNER JOIN company_list on payments.company_no = company_list.company_id 
WHERE CAST(date_last_modified As Date) = '2016-01-13' 
GROUP BY ROLLUP(company_name) 
+0

正是我在找什么,谢谢! – Tech77

相关问题