二个表在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.物品)