查询前
序号 货品编号 名称 颜色 内长 尺寸 数量
1 A01 上衣 红 0 S 10
2 A01 上衣 白 0 M 20
3 A01 上衣 黑 0 L 30
4 A02 下衣 红 0 S 5
5 A02 下衣 白 0 M 15
查询后
序号 货品编号 名称 颜色 内长 尺寸 数量
1 A01 上衣 红 0 S 10
2 白 0 M 20
3 黑 0 L 30
4 小计 60
5 A02 下衣 红 0 S 5
6 白 0 M 15
7 小计 20H
序号 货品编号 名称 颜色 内长 尺寸 数量
1 A01 上衣 红 0 S 10
2 A01 上衣 白 0 M 20
3 A01 上衣 黑 0 L 30
4 A02 下衣 红 0 S 5
5 A02 下衣 白 0 M 15
查询后
序号 货品编号 名称 颜色 内长 尺寸 数量
1 A01 上衣 红 0 S 10
2 白 0 M 20
3 黑 0 L 30
4 小计 60
5 A02 下衣 红 0 S 5
6 白 0 M 15
7 小计 20H
解决方案 »
- 关于游标打开临时表
- 一个字段要把重复的名称从第二个开始在名称后面加数字,这个SQL如何写,,,多谢
- UPDATE 问题
- ORACLE与SQLSERVER问题
- oracle可以计算微积分吗?
- oracle中等连接和左连接是什么概念?还有外连接和内连接都是什么?
- 如何将游标变量中的值插入到新表
- 数据库导入问题?imp system/sa@oracledb导入到用户aaa,但用户aaa已经存在的表会跳过,我想导入并覆盖原有的表怎么做?
- vc中新建数据库工程,使用odbc连接oracle数据库,登陆用户为sys用户,但是看不到sys和system方案下的任何一个表,其他的方案可以看到
- 如何将rman恢复数据库的的命令写成脚本自动运行
- 关于多级级联多对多关联数据表结构设计
- 一条SQL 自连接查询问题
序号 货品编号 名称 颜色 内长 尺寸 数量
1 A01 上衣 红 0 S 10
2 A01 上衣 白 0 M 20
3 A01 上衣 黑 0 L 30
4 A02 下衣 红 0 S 5
5 A02 下衣 白 0 M 15
查询后
序号 货品编号 名称 颜色 内长 尺寸 数量
1 A01 上衣 红 0 S 10
2 白 0 M 20
3 黑 0 L 30
4 小计 60
5 A02 下衣 红 0 S 5
6 白 0 M 15
7 小计 20
序号 货品编号 名称 颜色 内长 尺寸 数量
1 A01 上衣 红 0 S 10
2 A01 上衣 白 0 M 20
3 A01 上衣 黑 0 L 30
4 A02 下衣 红 0 S 5
5 A02 下衣 白 0 M 15
查询后
序号 货品编号 名称 颜色 内长 尺寸 数量
1 A01 上衣 红 0 S 10
2 白 0 M 20
3 黑 0 L 30
4 小计 60
5 A02 下衣 红 0 S 5
6 白 0 M 15
7 小计 20
(
select 1 序号,'A01' 货品编号,'上衣' 名称,'红' 颜色,0 内长,'S' 尺寸,10 数量 from dual union all
select 2 序号,'A01' 货品编号,'上衣' 名称,'白' 颜色,0 内长,'M' 尺寸,20 数量 from dual union all
select 3 序号,'A01' 货品编号,'上衣' 名称,'黑' 颜色,0 内长,'L' 尺寸,30 数量 from dual union all
select 4 序号,'A02' 货品编号,'下衣' 名称,'红' 颜色,0 内长,'S' 尺寸,5 数量 from dual union all
select 5 序号,'A02' 货品编号,'下衣' 名称,'白' 颜色,0 内长,'M' 尺寸,15 数量 from dual
)
select row_number()over(order by 货品编号,名称,颜色,内长,尺寸,数量)序号,
货品编号,名称,颜色,内长,尺寸,数量 from(
SELECT 货品编号,名称,颜色,内长,尺寸,数量 FROM T
UNION ALL
SELECT 货品编号,名称,NULL,NULL,'小计',sum(数量) FROM T GROUP BY 货品编号,名称
)
order by 货品编号,名称,颜色,内长,尺寸,数量;
序号 货品编号 名称 颜色 内长 尺寸 数量
---------- -------- ---- ---- ---------- ---- ----------
1 A01 上衣 白 0 M 20
2 A01 上衣 黑 0 L 30
3 A01 上衣 红 0 S 10
4 A01 上衣 小计 60
5 A02 下衣 白 0 M 15
6 A02 下衣 红 0 S 5
7 A02 下衣 小计 20
7 rows selected
要这样的结果,请您帮忙再修改下,谢谢您
这是我的数据结构
create table T_Goods
(
Id int primary key,
GId varchar2(10) not null,
GName varchar2(20) not null,
GColour varchar2(10),
GWithin int,
GSize varchar2(10),
GNumber int
) CREATE SEQUENCE seq_goods
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;
insert into T_Goods values(seq_goods.nextval,'A01','上衣','红',0,'S',10);
insert into T_Goods values(seq_goods.nextval,'A01','上衣','白',0,'M',20);
insert into T_Goods values(seq_goods.nextval,'A01','上衣','黑',0,'L',30);
insert into T_Goods values(seq_goods.nextval,'A02','下衣','红',0,'S',5);
insert into T_Goods values(seq_goods.nextval,'A02','下衣','白',0,'M',15);
with t as
(select GId, gname, gcolour, gwithin, gsize, sum(gnumber) gnumber
from t_goods
group by GId, gname, gcolour, gwithin, gsize
union all
select gid, gname, null, null, '小计', sum(gnumber)
from t_goods
group by gid, gname)
select rownum seq,
decode(rn, 1, gid) gid,
decode(rn, 1, gname) gname,
gcolour,
gwithin,
gsize,
gnumber
from (select t.*, row_number() over(partition by gid order by gnumber) rn
from t);
(select GId, gname, gcolour, gwithin, gsize, sum(gnumber) gnumber
from t_goods
group by GId, gname, gcolour, gwithin, gsize
union all
select gid, gname, null, null, '小计', sum(gnumber)
from t_goods
group by gid, gname
union all
select null, null, null, null, '总计', sum(gnumber)
from t_goods
)
select rownum seq,
decode(rn, 1, gid) gid,
decode(rn, 1, gname) gname,
gcolour,
gwithin,
gsize,
gnumber
from (select t.*, row_number() over(partition by gid order by gnumber) rn from t); SEQ GID GNAME GCOLOUR GWITHIN GSIZE GNUMBER
---------- ---------- -------------------- ---------- ---------- ---------- ----------
1 A01 上衣 红 0 S 10
2 白 0 M 20
3 黑 0 L 30
4 小计 60
5 A02 下衣 红 0 S 5
6 白 0 M 15
7 小计 20
8 总计 80
select --id,gid,
row_number() over( order by gid,id) 序号,
decode(row_number() over(partition by gid order by gid,id),'1',gid,'') 货品编号,
decode(row_number() over(partition by gname order by gname,id),'1',gname,'') 名称,
gcolour 颜色,
gwithin 内长,
case when id is null and gid is not null then '小计'
when id is null and gid is null then '总计'
else gsize end 尺寸,
sum(gnumber) 数量
from t_goods t
group by rollup(gid, (id, gname, gcolour, gwithin, gsize, gnumber))
order by gid,gname,id
create table T_Goods
(
GId varchar2(10) not null,
GName varchar2(20) not null,
GColour varchar2(10),
GWithin int,
GSize varchar2(10),
GNumber int
) insert into T_Goods values('A01','上衣','红',0,'S',10);
insert into T_Goods values('A01','上衣','红',0,'M',20);
insert into T_Goods values('A01','上衣','白',0,'L',30);
insert into T_Goods values('A01','下衣','红',0,'S',10);
insert into T_Goods values('A01','下衣','白',0,'M',20);
insert into T_Goods values('A01','下衣','黑',0,'L',30);
insert into T_Goods values('A02','上衣','红',0,'S',5);
insert into T_Goods values('A02','上衣','白',0,'M',15);
insert into T_Goods values('A02','下衣','红',0,'S',5);
insert into T_Goods values('A02','下衣','白',0,'M',15);