有二张表分别命名为a和b
a表是库存表数据如下:
编号    名称    库存数量    最小库存数量
001     鼠标        20        5
002     硬盘        15        3
003     光驱        20        8
b表是定单表数据如下:
编号    名称    数量 
001     鼠标     18        
003     光驱     10  现在怎么用sql语句来判断出a表减b表后小于最小库存数量的名称呢?

解决方案 »

  1.   

    create table A(编号 char(3),名称 varchar(20),库存数量 int,最小库存数量 int)
    insert A
    select '001','鼠标',20,5 union all
    select '002','硬盘',15,3 union all
    select '003','光驱',20,8
    select * from Acreate table B(编号 char(3),名称 varchar(20),数量 int)
    insert B
    select '001','鼠标',18  union all  
    select '001','鼠标',1   union all        -- 加多的测试数据  
    select '003','光驱',10  
    select * from Bselect A.编号,A.名称,A.库存数量-isnull(B.数量,0)-A.最小库存数量 from A left join 
    (
    select 编号,sum(数量) as 数量 from B group by 编号
    )B 
    on A.编号=B.编号
    where A.库存数量-isnull(B.数量,0)-A.最小库存数量<0drop table A,B
      

  2.   

    select a.* from
    (select 编号,名称,sum(库存数量) as 数量 from 
    (select 编号,名称,库存数量 from a
    union all
    select 编号,名称,-数量 from b)c group by 编号,名称) e right join a on
    e.编号=a.编号 and e.名称=a.名称 and e.数量<a.最小库存数量 where e.编号 is null
      

  3.   

    DECLARE @T TABLE(编号 INT,名称 VARCHAR(10),库存数量 INT,最小库存数量 INT)
    INSERT @T SELECT 1,'鼠标',20,5
    UNION ALL SELECT 2,'硬盘',15,3
    UNION ALL SELECT 3,'光驱',20,8
    ------
    DECLARE @T1 TABLE(编号 INT,名称 VARCHAR(10),数量 INT)
    INSERT @T1 SELECT 1,'鼠标',18
    UNION ALL SELECT 3,'光驱',10SELECT 
       编号,
       名称,
       库存数据= CASE WHEN  ISNULL((SELECT A.库存数量-数量 FROM @T1 WHERE 编号=A.编号),A.库存数量)>A.最小库存数量 THEN '不缺' ELSE '缺' END
    FROM @T A
      

  4.   


    select A.编号,A.名称,(A.库存数量 -B.数量)as 数量 from A left join B on A.编号=B.编号
    where (A.库存数量 -B.数量)<A.最小库存数量
      

  5.   

    TO:楼主
    b表是定单表数据如下订单表是明细的还是汇总的啊?