本文发表在 rolia.net 枫下论坛假设系统中表结构定义如下:
create table item(
item_no char(13) not null, /*商品编码*/
item_name varchar(30) not null, /*商品名称*/
class_no char(6) null, /*类别编码*/
brand_no char(6) null, /*品牌编码*/
primary key (item_no),)
create table class_brand(
class_no char(6) not null, /*类别或品牌编码*/
class_name varchar(30) not null, /*类别或品牌名称*/
class_type char(1) null, /*类别或品牌标志,0-类别;1-品牌*/
primary key (class_no, class_type),)
create table sale_flow(
flow_id numeric(16, 0) identity,
oper_date datetime not null, /*销售日期*/
item_no char(13) not null, /*商品编码*/
sale_qty decimal(16, 4) null, /*销售数量*/
sale_amt decimal(16, 4) null, /*销售金额*/
primary key (flow_id),)
各表中数据如下:
item表:
item_no item_name class_no brand_no
--------------------------------------------
01001 AAAAAAAA C01 B01
01002 BBBBBBBB C02 B01
01003 CCCCCCCC C01 B02
class_brand表:
class_no class_name class_type
-----------------------------------
C01 CC01 0
C02 CC02 1
B01 BB01 0
B02 BB02 1
sale_flow表:
flow_id oper_date item_no sale_qty sale_amt
----------------------------------------------------------
1 2002-11-05 10:05 01001 5.00 50.00
2 2002-11-05 10:05 01002 20.00 200.00
3 2002-11-05 12:15 01001 5.00 50.00
4 2002-11-05 12:15 01003 30.00 300.00
5 2002-11-06 12:15 01001 12.00 120.00
6 2002-11-06 12:15 01002 25.00 250.00
7 2002-11-07 11:30 01001 10.00 100.00
8 2002-11-07 11:30 01002 15.00 150.00
题:请编写SQL语句得到下列结果
oper_date item_no item_name sale_qty sale_amt class_name brand_name
--------------------------------------------------------------------------------
2002-11-05 01001 AAAAAAAA 10.00 100.00 CC01 BB01
2002-11-05 01002 BBBBBBBB 20.00 200.00 CC02 BB01
2002-11-05 01003 CCCCCCCC 30.00 300.00 CC01 BB02
2002-11-06 01001 AAAAAAAA 12.00 120.00 CC01 BB01
2002-11-06 01002 BBBBBBBB 25.00 250.00 CC02 BB01
2002-11-06 01003 CCCCCCCC 0.00 0.00 CC01 BB02
注:
1、 商品01001在11月5日有两笔销售,要汇总。
2、 商品01003在11月6日没有销售,但在报表里也要体现。
3、 类别名称和品牌名称在同一个表里,按class_type区分。更多精彩文章及讨论,请光临枫下论坛 rolia.net
create table item(
item_no char(13) not null, /*商品编码*/
item_name varchar(30) not null, /*商品名称*/
class_no char(6) null, /*类别编码*/
brand_no char(6) null, /*品牌编码*/
primary key (item_no),)
create table class_brand(
class_no char(6) not null, /*类别或品牌编码*/
class_name varchar(30) not null, /*类别或品牌名称*/
class_type char(1) null, /*类别或品牌标志,0-类别;1-品牌*/
primary key (class_no, class_type),)
create table sale_flow(
flow_id numeric(16, 0) identity,
oper_date datetime not null, /*销售日期*/
item_no char(13) not null, /*商品编码*/
sale_qty decimal(16, 4) null, /*销售数量*/
sale_amt decimal(16, 4) null, /*销售金额*/
primary key (flow_id),)
各表中数据如下:
item表:
item_no item_name class_no brand_no
--------------------------------------------
01001 AAAAAAAA C01 B01
01002 BBBBBBBB C02 B01
01003 CCCCCCCC C01 B02
class_brand表:
class_no class_name class_type
-----------------------------------
C01 CC01 0
C02 CC02 1
B01 BB01 0
B02 BB02 1
sale_flow表:
flow_id oper_date item_no sale_qty sale_amt
----------------------------------------------------------
1 2002-11-05 10:05 01001 5.00 50.00
2 2002-11-05 10:05 01002 20.00 200.00
3 2002-11-05 12:15 01001 5.00 50.00
4 2002-11-05 12:15 01003 30.00 300.00
5 2002-11-06 12:15 01001 12.00 120.00
6 2002-11-06 12:15 01002 25.00 250.00
7 2002-11-07 11:30 01001 10.00 100.00
8 2002-11-07 11:30 01002 15.00 150.00
题:请编写SQL语句得到下列结果
oper_date item_no item_name sale_qty sale_amt class_name brand_name
--------------------------------------------------------------------------------
2002-11-05 01001 AAAAAAAA 10.00 100.00 CC01 BB01
2002-11-05 01002 BBBBBBBB 20.00 200.00 CC02 BB01
2002-11-05 01003 CCCCCCCC 30.00 300.00 CC01 BB02
2002-11-06 01001 AAAAAAAA 12.00 120.00 CC01 BB01
2002-11-06 01002 BBBBBBBB 25.00 250.00 CC02 BB01
2002-11-06 01003 CCCCCCCC 0.00 0.00 CC01 BB02
注:
1、 商品01001在11月5日有两笔销售,要汇总。
2、 商品01003在11月6日没有销售,但在报表里也要体现。
3、 类别名称和品牌名称在同一个表里,按class_type区分。更多精彩文章及讨论,请光临枫下论坛 rolia.net