日期:2014-05-18  浏览次数:20418 次

请教一下这个sql怎么写 顶者皆有分 谢谢各位了
有一个表   列为
id(标识自增)产品名称   数量   规格   状态(0为进货   1为出货)日期           客户编号
数据如  
1                           恰恰瓜子   100     500克     0                                       2006-11-4       23
2                           娃哈哈酸奶300   100克     0                                       2006-12-3       11
3                           恰恰瓜子   80       500克     1                                       2006-11-4       4
4                           娃哈哈酸奶100   100克     1                                       2006-12-3       5

我现在想要实现的功能是   计算当前的库存产品数量。
就是   同名称同规格的产品进货总量-出货总量

输出结果
产品名称         数量           规格
恰恰瓜子           20           500克
娃哈哈酸奶       200         100克                  


------解决方案--------------------
Select
产品名称,
SUM(Case 状态 When 0 Then + 数量 Else - 数量 End) As 数量,
规格
From TableName
Group By 产品名称, 规格
------解决方案--------------------
沙發
------解决方案--------------------
暈,想先頂後看的,被搶了..
------解决方案--------------------
select 产品名称,sum(case when 状态=0 then 数量*-1 else 数量 end) as 数量, 规格
from tablename
group by 产品名称
------解决方案--------------------
-SORRY,先反了
select 产品名称,sum(case when 状态=0 then 数量 else 数量*-1 end) as 数量, 规格
from tablename
group by 产品名称
------解决方案--------------------
Create Table TEST
(id Int Identity(1, 1),
产品名称 Nvarchar(50),
数量 Int,
规格 Nvarchar(20),
状态 Bit,
日期 DateTime,
客户编号 Int)
Insert TEST Select N '恰恰瓜子 ', 100, N '500克 ', 0, '2006-11-4 ', 23
Union All Select N '娃哈哈酸奶 ', 300, N '100克 ', 0, '2006-12-3 ', 11
Union All Select N '恰恰瓜子 ', 80, N '500克 ', 1, '2006-11-4 ', 4
Union All Select N '娃哈哈酸奶 ',100, N '100克 ', 1, '2006-12-3 ', 5
GO
Select
产品名称,
SUM(Case 状态 When 0 Then + 数量 Else - 数量 End) As 数量,
规格
From TEST
Group By 产品名称, 规格
GO
Drop Table TEST
--Result
/*
产品名称 数量 规格
娃哈哈酸奶 200 100克
恰恰瓜子 20 500克
*/
------解决方案--------------------
怪事了,一看到Case when 就不爽, 总想找别的代替,哪怕更麻烦效率更差