SELECT A.单位,A.产品,A.数量 FROM ( SELECT 单位,产品,count(*) AS 数量 FROM TABLE_NAME GROUP BY 单位,产品 UNION SELECT '单位X' AS 单位,产品,sum(*) AS 数量 FROM TABLE_NAME GROUP BY 产品) A ORDER BY A.产品
报错应该是不支持grouping_id,要9i才行,可以用grouping 代替,rollup应该从8i开始就开始用了SELECT decode(GROUPING(单位), 1, '合计', 单位) 单位, 产品名称, SUM(数量) 数量 FROM c GROUP BY ROLLUP(产品名称, 单位) HAVING GROUPING(单位) + GROUPING(产品名称) <> 2GROUPING(单位)意思是在计算单位合计时标记为1,否则为0,如果这么改还不行,试试不用这个了:SELECT nvl(单位 '合计') 单位, 产品名称, SUM(数量) 数量 FROM c GROUP BY ROLLUP(产品名称, 单位)
我的是8i SELECT decode(GROUPING(单位), 1, '合计', 单位) 单位, 产品名称, SUM(数量) 数量 FROM c GROUP BY ROLLUP(产品名称, 单位) HAVING GROUPING(单位) + GROUPING(产品名称) <> 2这个没问题。 我还想得到c表的其他相关字段,比如产品规格、单价等字段,在上面的sql语句中如何修改。我搞了好一阵了,搞不出来啊,不知道该在什么地方加进其他对计算,排序没有影响的字段。
这样试试: SELECT decode(GROUPING(单位), 1, '合计', 单位) 单位, 产品名称, SUM(数量) 数量, decode(GROUPING(单位), 1, '产品备注', MAX(产品备注)) 产品备注, decode(GROUPING(单位), 1, '单价', MAX(单价)) 单价 FROM c GROUP BY ROLLUP(产品名称, 单位) HAVING GROUPING(单位) + GROUPING(产品名称) <> 2
FROM
(
SELECT 单位,产品,count(*) AS 数量
FROM TABLE_NAME
GROUP BY 单位,产品
UNION
SELECT '单位X' AS 单位,产品,sum(*) AS 数量
FROM TABLE_NAME
GROUP BY 产品) A
ORDER BY A.产品
2 产品名称,
3 SUM(数量)
4 FROM c
5 GROUP BY ROLLUP(产品名称, 单位)
6 /DECODE(GROUPING_ID(产品名称,单 产品名称 SUM(数量)
------------------------------ -------------------- ----------
单位1 产品1 100
单位2 产品1 200
单位3 产品1 300
合计 产品1 600
单位1 产品2 210
单位2 产品2 200
合计 产品2 410
总计
2 产品名称,
3 SUM(数量) 数量
4 FROM c
5 GROUP BY ROLLUP(产品名称, 单位)
6 HAVING grouping_id(产品名称, 单位) <> 3
7 /单位 产品名称 数量
-------------------- -------------------- ----------
单位1 产品1 100
单位2 产品1 200
单位3 产品1 300
合计 产品1 600
单位1 产品2 210
单位2 产品2 200
合计 产品2 4107 rows selected
产品名称,
SUM(数量) 数量
FROM c
GROUP BY ROLLUP(产品名称, 单位)
HAVING GROUPING(单位) + GROUPING(产品名称) <> 2GROUPING(单位)意思是在计算单位合计时标记为1,否则为0,如果这么改还不行,试试不用这个了:SELECT nvl(单位 '合计') 单位,
产品名称,
SUM(数量) 数量
FROM c
GROUP BY ROLLUP(产品名称, 单位)
SELECT decode(GROUPING(单位), 1, '合计', 单位) 单位,
产品名称,
SUM(数量) 数量
FROM c
GROUP BY ROLLUP(产品名称, 单位)
HAVING GROUPING(单位) + GROUPING(产品名称) <> 2这个没问题。
我还想得到c表的其他相关字段,比如产品规格、单价等字段,在上面的sql语句中如何修改。我搞了好一阵了,搞不出来啊,不知道该在什么地方加进其他对计算,排序没有影响的字段。
SELECT decode(GROUPING(单位), 1, '合计', 单位) 单位,
产品名称,
SUM(数量) 数量,
decode(GROUPING(单位), 1, '产品备注', MAX(产品备注)) 产品备注,
decode(GROUPING(单位), 1, '单价', MAX(单价)) 单价
FROM c
GROUP BY ROLLUP(产品名称, 单位)
HAVING GROUPING(单位) + GROUPING(产品名称) <> 2