有如下表TB
序号     地区      门店     车型    数量     标志
1 天河 第一 奔驰 29 in
2 天河 第一 宝马 22 in
3 天河 第二 奥迪 28 in
4 天河 第二 奥迪 9 out
5 天河 第一 宝马 6 out
6 黄埔 第三 宝马 6 out
7 黄埔 第三 宝马 43 in
8 黄埔 第三 宝马 6       out
...      要得到如下显示的结果,请问该如何写select语句地区      门店     车型    总数量     
天河 第一 奔驰 29
天河 第一 宝马 16
天河 第二 奥迪 19
黄埔 第三 宝马 31
...
       
说明:如果标志为in,则为入库,应该加数;如果标志为out,则为出库,应该减数。请高人指教!!!(尽量使用一条语句)

解决方案 »

  1.   

    有如下表TB 
    序号    地区      门店    车型    数量   标志 
    1      天河      第一    奔驰    29    in 
    2      天河      第一    宝马    22    in 
    3      天河      第二    奥迪    28    in 
    4      天河      第二    奥迪    9     out 
    5      天河      第一    宝马    6     out 
    6      黄埔      第三    宝马    6     out 
    7      黄埔      第三    宝马    43    in 
    8      黄埔      第三    宝马    6     out 
    ...      要得到如下显示的结果,请问该如何写select语句 地区  门店  车型  总数量    
    天河  第一  奔驰  29 
    天河  第一  宝马  16 
    天河  第二  奥迪  19 
    黄埔  第三  宝马  31 
    ... 
          
    说明:如果标志为in,则为入库,应该加数;如果标志为out,则为出库,应该减数。 请高人指教!!!(尽量使用一条语句) 
      

  2.   

    create table #Test(id int identity(1,1) primary key,a varchar(20),b varchar(20),
    c varchar(20) ,d int,e varchar(3))
    insert into #Test(a,b,c,d,e) 
    select 'aa','one','bc',29,'in' union all
    select 'aa','one','bm',22,'in' union all
    select 'aa','two','ad',28,'in' union all
    select 'aa','two','ad',9,'out' union all
    select 'aa','one','bm',6,'out' union all
    select 'bb','three','ba',6,'out' union all
    select 'bb','three','ba',43,'in' union all
    select 'bb','three','ba',6,'out' 
    select a,b,c,sum(case  when e='in' then d else -d end) from #test group by a,b,c
      

  3.   

    create table  tb
    (
    序号 int identity(1,1),
    地区 varchar(10),
    门店 varchar(10),
    车型 varchar(10),
    数量 tinyint ,
    标志 varchar(10)
    )
    insert into tb(地区,门店,车型,数量,标志)
    select '天河','第一','奔驰',29,'in'
    union all
    select '天河','第一','宝马',22,'in'
    union all
    select '天河','第二','奥迪',28,'in'
    union all
    select '天河','第二','奥迪',9,'out'
    union all
    select '天河','第一','宝马',6,'out'
    union all
    select '黄埔','第三','宝马',6,'out'
    union all
    select '黄埔','第三','宝马',43,'in'
    union all
    select '黄埔','第三','宝马',6,'out'
    select 地区,门店,车型,sum(case 标志 when 'in' then 数量 else 0-数量 end ) as 总数量 from tb group by 地区,门店,车型
    查询结果:
    地区         门店         车型         总数量         
    ---------- ---------- ---------- ----------- 
    黄埔         第三         宝马         31
    天河         第二         奥迪         19
    天河         第一         宝马         16
    天河         第一         奔驰         29(所影响的行数为 4 行)