我有如下表:在SQL Server中使用GROUP BY子句返回两行08
acc_name dr_amt cr_amt
Cash in hand 10000 0
Share Capital 00 1000
Cash in hand 2000 0
Share Capital 0 2000.00
Vehicles 5000 0
Cash in hand 0 5000
用下面的查询,
SELECT a.acc_name, sum(j.dr_amt) AS dr_sum, sum(j.cr_amt) AS cr_sum
FROM journal_voucher_details_mcg AS j
INNER JOIN acc_head_mcg AS a ON a.acc_code = j.acc_code
INNER JOIN journal_voucher_mcg AS jv ON jv.jv_no = j.jv_no
WHERE jv.jv_date = '2011-04-08'
GROUP BY a.acc_name
我能够得到如下结果:
acc_name dr_sum cr_sum
Cash in hand 3000 5000
Share Capital 0 3000
Vehicles 5000 0
但我希望手中有两笔现金(对于既有dr_sum又有cr_sum大于0的任何入口),并且结果是d是如下:
acc_name dr_sum cr_sum
Cash in hand 3000 0
Cash in hand 0 5000
Share Capital 0 3000
Vehicles 5000 0
我还需要两dr_sum和cr_sum的总和,在这种情况下,应该是8000到两个....我的最终查询是
SELECT *, SUM(dr_sum), SUM(cr_sum)
FROM (SELECT a.acc_name, sum(j.dr_amt) AS dr_sum, sum(j.cr_amt) AS cr_sum
FROM journal_voucher_details_mcg AS j
INNER JOIN acc_head_mcg AS a ON a.acc_code = j.acc_code
INNER JOIN journal_voucher_mcg AS jv ON jv.jv_no = j.jv_no
WHERE jv.jv_date = '2011-04-08'
GROUP BY j.acc_code)
但是这一次不是工作....将真正感谢你的努力家伙!
编辑
最终结果集:
acc_name dr_sum cr_sum
Cash in hand 3000 0
Cash in hand 0 5000
Share Capital 0 3000
Vehicles 5000 0
Total 8000 8000
我无法显示“总”在过去的元组的第一场(字总计)。
我需要分别dr_sum柱cr_column所有金额的总和......所以你的第一个假设是正确的。我希望总和显示为最终的元组,像'... UNION SELECT SUM(dr_sum),SUM(cr_sum)FROM W_RESULT'。但是我不能让“Total”这个词在最后一个元组中显示为一个字段。请参阅上面的编辑以获得进一步的说明。 – mannyee 2011-04-10 05:34:51
加入这个联盟应该做的伎俩。 'UNION SELECT'Total'AS acc_name,SUM(dr_sum),SUM(cr_sum)FROM W_RESULT' – 2011-04-10 11:47:33
用完整的解决方案更新了答案。 (使用'UNION ALL'添加最后一个'Total'将把它作为最后一行) – 2011-04-11 14:50:25