我有一张价格档次表如下 :
create table t_PriceType1
(
dcdm varchar(10) ,--档次代码
dcmc varchar(30) ,--档次名称
sx dec(12,5) ,--上限
xx dec(12,5) ,--下限
bz varchar(50) ,--备注
);
insert t_PriceType1 values('001','低',0.00,2.00,''); --表示 如果产品的价格是在 0≤价格<2.00 ,这这个产 --品是低档品
insert t_PriceType1 values('002','中',2.01,4.00,''); --表示 如果产品的价格是在 2.00≤价格<4.00 ,这这个 --产品是中档品
insert t_PriceType1 values('003','高',4.01,100.00,'');--表示 如果产品的价格是在 4.00≤价格<100.00 ,这 --这个产品是高档品还有一行销售表:
create table t_SaleEntry
(
cpdm varchar(10) ,--产品代码
dj varchar(30) ,--单价名称
sl dec(12,5) ,--数量
);
insert t_SaleEntry values('A',2.10,100);
insert t_SaleEntry values('A',3.00,200);
insert t_SaleEntry values('B',5.10,300);
insert t_SaleEntry values('B',1.10,400);
insert t_SaleEntry values('C',12.10,500);我希望得到如下的数据:
cpdm dj sl dcdm(档次代码)
A 2.10 100 002
A 3.00 200 002
B 5.10 300 003
B 1.10 400 001
C 12.10 500 003请问这个SQL要怎么写,用存储过程也可以.
create table t_PriceType1
(
dcdm varchar(10) ,--档次代码
dcmc varchar(30) ,--档次名称
sx dec(12,5) ,--上限
xx dec(12,5) ,--下限
bz varchar(50) ,--备注
);
insert t_PriceType1 values('001','低',0.00,2.00,''); --表示 如果产品的价格是在 0≤价格<2.00 ,这这个产 --品是低档品
insert t_PriceType1 values('002','中',2.01,4.00,''); --表示 如果产品的价格是在 2.00≤价格<4.00 ,这这个 --产品是中档品
insert t_PriceType1 values('003','高',4.01,100.00,'');--表示 如果产品的价格是在 4.00≤价格<100.00 ,这 --这个产品是高档品还有一行销售表:
create table t_SaleEntry
(
cpdm varchar(10) ,--产品代码
dj varchar(30) ,--单价名称
sl dec(12,5) ,--数量
);
insert t_SaleEntry values('A',2.10,100);
insert t_SaleEntry values('A',3.00,200);
insert t_SaleEntry values('B',5.10,300);
insert t_SaleEntry values('B',1.10,400);
insert t_SaleEntry values('C',12.10,500);我希望得到如下的数据:
cpdm dj sl dcdm(档次代码)
A 2.10 100 002
A 3.00 200 002
B 5.10 300 003
B 1.10 400 001
C 12.10 500 003请问这个SQL要怎么写,用存储过程也可以.
select a.*,b.dcdm from t_SaleEntry a left join t_PriceType1 b
on a.sl<=b.xx and a.sl>=b.sx
from t_SaleEntry a,t_PriceType1 b
where a.dj between b.sx and b.xx
(
dcdm varchar(10) ,--档次代码
dcmc varchar(30) ,--档次名称
sx dec(12,5) ,--上限
xx dec(12,5) ,--下限
bz varchar(50) ,--备注
);
insert t_PriceType1 values('001','低',0.00,2.00,''); --表示 如果产品的价格是在 0≤价格 <2.00 ,这这个产 --品是低档品
insert t_PriceType1 values('002','中',2.01,4.00,''); --表示 如果产品的价格是在 2.00≤价格 <4.00 ,这这个 --产品是中档品
insert t_PriceType1 values('003','高',4.01,100.00,'');--表示 如果产品的价格是在 4.00≤价格 <100.00 ,这 --这个产品是高档品 还有一行销售表:
create table t_SaleEntry
(
cpdm varchar(10) ,--产品代码
dj varchar(30) ,--单价名称
sl dec(12,5) ,--数量
);
insert t_SaleEntry values('A',2.10,100);
insert t_SaleEntry values('A',3.00,200);
insert t_SaleEntry values('B',5.10,300);
insert t_SaleEntry values('B',1.10,400);
insert t_SaleEntry values('C',12.10,500); select a.* , dcdm = isnull((select dcdm from t_PriceType1 where a.sl between sx and xx),'') from t_SaleEntry adrop table t_PriceType1,t_SaleEntry /*
cpdm dj sl dcdm
---------- ------------------------------ -------------- ----------
A 2.10 100.00000 003
A 3.00 200.00000
B 5.10 300.00000
B 1.10 400.00000
C 12.10 500.00000 (所影响的行数为 5 行)
*/
(
dcdm varchar(10) ,--档次代码
dcmc varchar(30) ,--档次名称
sx dec(12,5) ,--上限
xx dec(12,5) ,--下限
bz varchar(50) ,--备注
);
insert t_PriceType1 values('001','低',0.00,2.00,''); --表示 如果产品的价格是在 0≤价格 <2.00 ,这这个产 --品是低档品
insert t_PriceType1 values('002','中',2.01,4.00,''); --表示 如果产品的价格是在 2.00≤价格 <4.00 ,这这个 --产品是中档品
insert t_PriceType1 values('003','高',4.01,100.00,'');--表示 如果产品的价格是在 4.00≤价格 <100.00 ,这 --这个产品是高档品 还有一行销售表:
create table t_SaleEntry
(
cpdm varchar(10) ,--产品代码
dj varchar(30) ,--单价名称
sl dec(12,5) ,--数量
);
insert t_SaleEntry values('A',2.10,100);
insert t_SaleEntry values('A',3.00,200);
insert t_SaleEntry values('B',5.10,300);
insert t_SaleEntry values('B',1.10,400);
insert t_SaleEntry values('C',12.10,500); --select * from t_PriceType1
--select * from t_SaleEntry
select a.* , dcdm = isnull((select dcdm from t_PriceType1 where a.dj between sx and xx),'') from t_SaleEntry a
drop table t_PriceType1,t_SaleEntry /*
cpdm dj sl dcdm
---------- ------------------------------ -------------- ----------
A 2.10 100.00000 002
A 3.00 200.00000 002
B 5.10 300.00000 003
B 1.10 400.00000 001
C 12.10 500.00000 003(所影响的行数为 5 行)*/