22,210
社区成员
发帖
与我相关
我的任务
分享
select
case when pinming is not null then pinming else '合计' end as pinming,
sum(shuliang) as shuliang,
sum(jiage) as jiage,
sum(shuliang*jiage) as jine
from assj
group by pinming with rollup
SELECT pinming,
MAX(shuliang) AS shuliang,
MAX(jiage) AS jiage,
SUM(shuliang * jiage) AS zongjine,
MAX(riqi) AS riqi
FROM assj
GROUP BY ROLLUP(pinming)
SELECT pinming,
SUM(shuliang * jiage) AS zongjine
FROM assj
GROUP BY ROLLUP(pinming)
SELECT @@VERSION;
USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(
pinming NVARCHAR(10),
shuliang INT,
jiage INT,
zongjine AS shuliang*jiage --计算列
)
GO
INSERT INTO t(pinming,shuliang,jiage) VALUES ('包子',5,2)
INSERT INTO t(pinming,shuliang,jiage) VALUES ('水饺',10,2)
--用计算列
SELECT * FROM t
UNION ALL
SELECT '合计' AS pinming,NULL,NULL,SUM(zongjine)
FROM t
--不用计算列
;WITH cte AS (
SELECT pinming,shuliang,jiage,shuliang*jiage AS zongjine FROM t
)
SELECT * FROM cte
UNION ALL
SELECT '合计' AS pinming,NULL,NULL,SUM(zongjine)
FROM cte
USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(
pinming NVARCHAR(10),
shuliang INT,
jiage INT,
zongjine AS shuliang*jiage --计算列
)
GO
INSERT INTO t(pinming,shuliang,jiage) VALUES ('包子',5,2)
INSERT INTO t(pinming,shuliang,jiage) VALUES ('水饺',10,2)
---- 以上为测试表及测试数据 ------
--方法1:用计算列
SELECT
CASE WHEN pinming IS NOT NULL THEN pinming ELSE '合计' END AS pinming
,CASE WHEN pinming IS NOT NULL THEN MAX(shuliang) ELSE NULL END AS shuliang
,CASE WHEN pinming IS NOT NULL THEN MAX(jiage) ELSE NULL END AS jiage
,sum(zongjine) AS zongjine
FROM t group by rollup(pinming)
--方法2:不用计算列
SELECT
CASE WHEN pinming IS NOT NULL THEN pinming ELSE '合计' END AS pinming
,CASE WHEN pinming IS NOT NULL THEN MAX(shuliang) ELSE NULL END AS shuliang
,CASE WHEN pinming IS NOT NULL THEN MAX(jiage) ELSE NULL END AS jiage
,sum(shuliang*jiage) AS zongjine
FROM t group by rollup(pinming)