![](https://img.51dongshi.com/20250105/wz/18521506352.jpg)
在SQL Server中,你可以使用ROLLUP操作符來生成匯總行。考慮以下查詢語句:SELECT CASE WHEN GROUPING(a.rcpt_no) = 1 AND GROUPING(b.姓名) = 1 THEN 'SUM' ELSE MAX(b.姓名) END 姓名, CASE WHEN GROUPING(a.rcpt_no) = 1 AND GROUPING(b.姓名) = 1 THEN 'SUM' ELSE MAX(a.rcpt_no) END 收據, SUM(CASE WHEN a.money_type = '卡支付' THEN income ELSE 0 END) AS 卡支付, SUM(CASE WHEN a.money_type = '統籌支付' THEN income ELSE 0 END) AS 統籌支付, SUM(CASE WHEN a.money_type = '現金' THEN income ELSE 0 END) AS 支付現金, SUM(CASE WHEN a.money_type = '現金' THEN refund ELSE 0 END) AS 退還現金, SUM(CASE WHEN a.money_type = '現金' THEN income - refund ELSE 0 END) AS 實際支付現金, SUM(CASE WHEN a.money_type = '記賬' THEN income - refund ELSE 0 END) AS 記賬, SUM(income - refund) AS 總費用 FROM inp_payments_money a, pat_master_index b WHERE a.rcpt_no = b.rcpt_no GROUP BY a.rcpt_no, b.姓名 WITH ROLLUP HAVING GROUPING(a.rcpt_no) = 1 AND GROUPING(b.姓名) = 1 OR GROUPING(a.rcpt_no) = 0 AND GROUPING(b.姓名) = 0 ORDER BY MAX(a.rcpt_no), MAX(b.姓名)這個查詢通過GROUP BY子句和WITH ROLLUP操作符,生成了匯總行。在結果集中,SUM行會顯示為'SUM',而其他行會顯示具體的收據號或姓名。通過HAVING子句,你可以進一步過濾匯總行。請注意,SUM(income)作為卡支付單獨列出,但在實際查詢中可能需要調整以符合具體需求。該查詢展示了如何計算不同支付類型的收入和退款,并生成匯總行。通過這種方式,你可以輕松地查看各個收據號和姓名的支付詳情,同時也能了解整體的支付情況。在實際應用中,你可以根據具體需求調整字段和條件。例如,如果需要計算特定時間段內的支付情況,可以在WHERE子句中添加時間范圍的條件。此外,根據實際業務邏輯,可能還需要調整SUM和CASE語句以滿足不同的計算需求。總之,通過ROLLUP操作符,SQL Server提供了一種強大的方式來生成匯總行,這對于數據分析和報告生成非常有用。