求一个sql语句

fufan 2005-11-02 10:42:13
单位 产品名称 数量

单位1 产品1 100
单位2 产品1 200
单位3 产品1 300
合计 600
单位1 产品2 210
单位2 产品2 200
合计 410

...

求sql语句,产生以上结果集。 急!
...全文
179 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
云帆 2005-11-03
  • 打赏
  • 举报
回复
学习了不少,谢谢楼主,也谢谢楼上的兄弟。
沝林 2005-11-03
  • 打赏
  • 举报
回复
这样试试:
SELECT decode(GROUPING(单位), 1, '合计', 单位) 单位,
产品名称,
SUM(数量) 数量,
decode(GROUPING(单位), 1, '产品备注', MAX(产品备注)) 产品备注,
decode(GROUPING(单位), 1, '单价', MAX(单价)) 单价
FROM c
GROUP BY ROLLUP(产品名称, 单位)
HAVING GROUPING(单位) +  GROUPING(产品名称) <> 2
沝林 2005-11-02
  • 打赏
  • 举报
回复
不要总计的情况:

SQL> SELECT decode(grouping_id(产品名称, 单位), 1, '合计', 单位) 单位,
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 410

7 rows selected
沝林 2005-11-02
  • 打赏
  • 举报
回复
SQL> SELECT decode(grouping_id(产品名称, 单位), 1, '合计', 3, '总计', 单位),
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
总计
qiaozhiwei 2005-11-02
  • 打赏
  • 举报
回复
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.产品
fufan 2005-11-02
  • 打赏
  • 举报
回复
单位 产品名称 数量 产品备注 单价
-------------------- -------------------- ----------
单位1 产品1 100 白纸装箱 2.00
单位2 产品1 200 塑料袋装 2.00
单位3 产品1 300 -- 2.10
合计 产品1 600 随便用一个值代替 用一个值代替
单位1 产品2 210 。。 5.00
单位2 产品2 200 。。 5.00
合计 产品2 410 。。 5.00


后面的字段跟排序、计算无关,但同属数据库的一条记录。输出的记录集怎么包含其他无关的字段?
沝林 2005-11-02
  • 打赏
  • 举报
回复
给出你输出报表的格式,我再看看该怎么改……
fufan 2005-11-02
  • 打赏
  • 举报
回复
我的是8i
SELECT decode(GROUPING(单位), 1, '合计', 单位) 单位,
产品名称,
SUM(数量) 数量
FROM c
GROUP BY ROLLUP(产品名称, 单位)
HAVING GROUPING(单位) + GROUPING(产品名称) <> 2

这个没问题。
我还想得到c表的其他相关字段,比如产品规格、单价等字段,在上面的sql语句中如何修改。我搞了好一阵了,搞不出来啊,不知道该在什么地方加进其他对计算,排序没有影响的字段。
沝林 2005-11-02
  • 打赏
  • 举报
回复
如果统计的数据量大并且计算相对复杂,用rollup效率远远高于用union的,union其实做了2次重复的运算,这点看执行计划就可以看出来了
沝林 2005-11-02
  • 打赏
  • 举报
回复
报错应该是不支持grouping_id,要9i才行,可以用grouping 代替,rollup应该从8i开始就开始用了

SELECT decode(GROUPING(单位), 1, '合计', 单位) 单位,
产品名称,
SUM(数量) 数量
FROM c
GROUP BY ROLLUP(产品名称, 单位)
HAVING GROUPING(单位) + GROUPING(产品名称) <> 2

GROUPING(单位)意思是在计算单位合计时标记为1,否则为0,如果这么改还不行,试试不用这个了:

SELECT nvl(单位 '合计') 单位,
产品名称,
SUM(数量) 数量
FROM c
GROUP BY ROLLUP(产品名称, 单位)
zzwind5 2005-11-02
  • 打赏
  • 举报
回复
你的 oracle 什么版本?
fufan 2005-11-02
  • 打赏
  • 举报
回复
谁给讲讲duanzilin(寻) 的sql 的原理?谢谢
fufan 2005-11-02
  • 打赏
  • 举报
回复
用 qiaozhiwei(乔)的sql,弄出来了。

duanzilin(寻) 的sql看不大懂。弄进oracle执行了一下,报错,调试不出来,晕了

谢谢了!!!

17,137

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧