日期:2014-05-19  浏览次数:20341 次

二个表在asp.net如何写下面的SQL语句啊,请各位高手们指教一下
请各位大侠指点一下,如何办啊?
表type

id     物品
1       足球
2       蓝球
3       羽毛球


表detail

id   物品       数量       状态
1     足球       50           入库
2     蓝球       30           买出
3     足球       14           买出
4     羽毛球   45           入库
5     蓝球       10           买出
6     足球       25           买出

如何写出统计现有数据的SQL语句呢?
物品     总数     现有库存       买出数量    
足球       50           11                 39
蓝球       -40         0                   40
羽毛球   45           45                   0  
-------------------------------
本人想用asp.net写出,大家能给出思路吗?

------解决方案--------------------

select
物品,
sum(case when 状态= '入库 ' then 数量 else 0 end) as 总数,
sum(case when 状态= '入库 ' then 数量 when 状态= '买出 ' then -1*数量 else 0 end) as 现有库存,
sum(case when 状态= '买出 ' then 数量 else 0 end) as 买出数量
from T
group by 物品
------解决方案--------------------
if object_id( 'pubs..detail ') is not null
drop table detail
go

create table detail
(
id int,
物品 varchar(10),
数量 int,
状态 varchar(10)
)

insert into detail(id,物品,数量,状态) values(1, '足球 ' ,50, '入库 ')
insert into detail(id,物品,数量,状态) values(2, '蓝球 ' ,30, '买出 ')
insert into detail(id,物品,数量,状态) values(3, '足球 ' ,14, '买出 ')
insert into detail(id,物品,数量,状态) values(4, '羽毛球 ' ,45, '入库 ')
insert into detail(id,物品,数量,状态) values(5, '蓝球 ' ,10, '买出 ')
insert into detail(id,物品,数量,状态) values(6, '足球 ' ,25, '买出 ')

select 物品 ,
case when 总数 = 0 then 总数 - 买出数量 else 总数 end as 总数 ,
case when (总数 - 买出数量) < 0 then 0 else 总数 - 买出数量 end as 现有库存,
买出数量
from
(
select 物品,
sum(case when 状态 = '入库 ' then 数量 else 0 end) as 总数,
sum(case when 状态 = '买出 ' then 数量 else 0 end) as 买出数量
from detail
group by 物品
) t

drop table detail

/*result
物品 总数 现有库存 买出数量
---------- ----------- ----------- -----------
蓝球 -40 0 40
羽毛球 45 45 0
足球 50 11 39

(所影响的行数为 3 行)

*/
------解决方案--------------------
解决了

select t1.物品,t1.total,t2.total from ((SELECT 物品,sum(数量) as total
FROM goods where states=入库
GROUP BY 物品) as t1 inner join (SELECT 物品,sum(数量) as total
FROM goods where states=出库
GROUP BY 物品) as t2 on t1.物品= t2.物品)