我有一张价格档次表如下 :
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要怎么写,用存储过程也可以.

解决方案 »

  1.   


    select a.*,b.dcdm from t_SaleEntry a left join t_PriceType1 b
    on a.sl<=b.xx and a.sl>=b.sx
      

  2.   

    select a.* ,b.dcdm
    from t_SaleEntry a,t_PriceType1 b
    where a.dj between b.sx and b.xx
      

  3.   

    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); 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 行)
    */
      

  4.   

    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); --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 行)*/