求一SQL语句,数据库如下:
卡片名称   卡片类型   起始卡号   终止卡号   卡片流向   数量
消费卡       有磁卡    00001       00099      入库      100
消费卡       有磁卡    00001       00099      入库      200
消费卡       无磁卡    00100       00199      入库      150
消费卡       有磁卡    00001       00099      入库      100
消费卡       有磁卡    00001       00099      出库      220写一SQL语句,求出库存量,入库数量-出库数量,这个怎么写,最后的结果这样的
卡片名称   卡片类型   起始卡号   终止卡号   卡片流向   库存量
消费卡       有磁卡    00001       00099      入库      180
消费卡       无磁卡    00100       00199      入库      150

解决方案 »

  1.   

    SELECT 卡片名称,卡片类型,起始卡号,终止卡号,SUM(T*数量) 库存量 FROM(
       SELECT *,CASE WHEN 卡片流向='入库' THEN 1 ELSE -1 END T FROM table
    ) A
    GROUP BY 卡片名称,卡片类型,起始卡号,终止卡号
      

  2.   


    select 卡片名称,卡片类型,起始卡号,终止卡号,case when 库存量<0 then '出库' else '入库' end as 卡片流向,库存量 from
    (select 卡片名称,卡片类型,起始卡号,终止卡号,sum(case when 卡片流向='入库' then 数量 else -数量 end) as 库存量 from [table] group by 卡片名称,卡片类型,起始卡号,终止卡号)t1
      

  3.   


    select 卡片名称,卡片类型,起始卡号,终止卡号,
           case when 库存量<0 then '出库' else '入库' end as 卡片流向,库存量 
    from
    (select 卡片名称,卡片类型,起始卡号,终止卡号,
            sum(case when 卡片流向='入库' then 数量 else -数量 end) as 库存量 
     from [table] group by 卡片名称,卡片类型,起始卡号,终止卡号)t1
      

  4.   

    create table #a (a varchar(10),b varchar(10), c varchar(10),d varchar(10),e varchar(10),f int)
    insert #a
    select '消费卡' ,'有磁卡', '00001' ,'00099', '入库' ,'100' union all
    select'消费卡', '有磁卡', '00001', '00099', '入库', '200'union all
    select'消费卡' ,'无磁卡', '00100', '00199', '入库', '150'union all
    select'消费卡' ,'有磁卡', '00001', '00099', '入库', '100'union all
    select'消费卡' ,'有磁卡', '00001', '00099', '出库', '220'select a,b,c,d,sum(case when e = '入库' then f else -f end) from #a group by a,b,c,d/*
    消费卡 无磁卡 00100 00199 150
    消费卡 有磁卡 00001 00099 180
    */
      

  5.   


    select 卡片名称,卡片类型,起始卡号,终止卡号,'入库' as 卡片流向 ,sum(case when 卡片流向 ='入库' then 数量 else -数量 end) as 库存量
    from tb
    group by 卡片名称,卡片类型,起始卡号,终止卡号
    order by 起始卡号
      

  6.   


    select [card_name],[card_type],[card_start],[card_end],SUM(t*card_number) 库存量 from(select *,case when card_flow='入库' then 1 else -1 end T from [Esa_Web_Opr_New].[dbo].[cardManage])A
     group by card_name,card_type,card_start,card_end照3楼改的,完全正确,其他的没试,我想把库存量存到变量里怎么办?
      

  7.   

    SQL语句太深奥了,以前没这么写过
      

  8.   

    写成存储过程,select @变量 =(..) from ...
      

  9.   


    --sqlstatement select a.卡片名称 ,a.卡片类型 ,a.起始卡号 a.终止卡号, a.卡片流向,sum(a.sum) 库存量
     from
    ( select 卡片类型,卡片流向,
     case when inout='出库' then
     ( select sum*-1 from cstest where inout='³ö¿â') else sum end sum
      from cstest) a group by a.卡片类型
      

  10.   

    --sqlstatement select a.卡片名称 ,a.卡片类型 ,a.起始卡号 a.终止卡号, a.卡片流向,sum(a.sum) 库存量
     from
    ( select 卡片类型,卡片流向,
     case when inout='出库' then
     ( select sum*-1 from cstest where inout='出库') else sum end sum
      from cstest) a group by a.卡片类型
      

  11.   

    最好懂的就是将出库的更新成负的,然后再用sum合计,这样就简单了
     
    一:select * into backup from 表
    二:update backup set 数量=-数量 where 卡向流向=出库
    三:select 卡片名称 ,卡片类型, 起始卡号, 终止卡号, 卡片流向,sum(数量)
    from backup group by 卡片名称 ,卡片类型, 起始卡号, 终止卡号, 卡片流向
      

  12.   


    SELECT 卡片名称 ,卡片类型 ,起始卡号 ,终止卡号 ,卡片流向,
    SUM(CASE WHEN 卡片流向 = '出库' THEN -数量 ELSE 数量)
    FROM TB
      

  13.   

    select [card_name],[card_type],[card_start],[card_end],SUM(t*card_number) 库存量 from(select *,case when card_flow='入库' then 1 else -1 end T from [Esa_Web_Opr_New].[dbo].[cardManage])A
    grou……
    以上是写入存储的过程,如果实现第一种方式 建议还是采用三楼的语句,祝成功!
      

  14.   


    靠!you must be kidding me! 
      

  15.   

    create table #temptb
    (
    id int identity(1,1)primary key,
    卡片名称 varchar(30),
    卡片类型 varchar(30),
    起始卡号 varchar(30),
    终止卡号 varchar(30),
    卡片流向 varchar(30),
    数量 int,
    库存 int
    )
    insert into #temptb (卡片名称,卡片类型,起始卡号,
    终止卡号,卡片流向,数量) values('消费卡','有磁卡','00001','00099','入库',200)
    insert into #temptb (卡片名称,卡片类型,起始卡号,
    终止卡号,卡片流向,数量) values('消费卡','无磁卡','00100','00199','入库',150)
    insert into #temptb (卡片名称,卡片类型,起始卡号,
    终止卡号,卡片流向,数量) values('消费卡','有磁卡','00001','00099','入库',100)
    insert into #temptb (卡片名称,卡片类型,起始卡号,
    终止卡号,卡片流向,数量) values('消费卡','有磁卡','00001','00099','出库',220)update #temptb set 库存=
    (case when 卡片流向='入库' then 数量 
    when 卡片流向='出库' then 数量*(-1) end )select 卡片名称,卡片类型,起始卡号,终止卡号,sum(库存) from #temptb
    group by 卡片名称,卡片类型,起始卡号,终止卡号
      

  16.   


    select [card_name],[card_type],[card_start],[card_end],SUM(t*card_number) kc into #f from(select *,case when card_flow='入库' then 1 else -1 end T from cardManage.dbo.cardManage)A
     group by card_name,card_type,card_start,card_end把查询结果存入临时变量KC中,然后对KC进行操作
      

  17.   

    同样的SQL语句,为什么在SQL SERVER中能执行,放在程序里就不执行了?
    SQL SERVER中:select [card_name],[card_type],[card_start],[card_end],SUM(t*card_number) Invertory into #temp from(select *,case when card_flow='入库' then 1 else -1 end T from [Esa_Web_Opr_New].[dbo].[cardManage])A group by card_name,card_type,card_start,card_end,mer_no,set_no程序中sql = "select [card_name],[card_type],[card_start],[card_end],SUM(t*card_number) Invertory into #temp from(select *,case when card_flow='鍏ュ簱' then 1 else -1 end T from [Esa_Web_Opr_New].[dbo].[cardManage])A group by card_name,card_type,card_start,card_end,mer_no,set_no"
    rs.open(sql, conn, 3, 1)
      

  18.   

    主要目的是把查询结果放在临时数据库中,程序中SQL语句不能创建的#temp
      

  19.   


    sql = "select [card_name],[card_type],[card_start],[card_end],SUM(t*card_number) Invertory into #temp from(select *,case when card_flow='入库' then 1 else -1 end T from [Esa_Web_Opr_New].[dbo].[cardManage])A group by card_name,card_type,card_start,card_end,mer_no,set_no"这个语句是把查询结果存放在临时表#temp中,下次查询时是不是要先删除临时表,如果删除的话,怎样判断表是否存在?