有一个表in_stock(月份mth,日期indate,编码stock_no名称stock_na)
月份----日期--------编码------名称--------进库数量
1 2012/1/2 001 TCL电视 5
1 2012/1/5 001 TCL电视 6
2 2012/2/6 001 TCL电视 10
1 2012/1/3 002 格力空调 20
1 2012/1/4 002 格力空调 20
2 2012/2/8 002 格力空调 30
...
用SELECT 语句怎么实现以下结果:
编码------名称--------1月份-----2月份------3月份....
001 TCL电视 11 10
002 格力空调 40 30
............................................................................
月份----日期--------编码------名称--------进库数量
1 2012/1/2 001 TCL电视 5
1 2012/1/5 001 TCL电视 6
2 2012/2/6 001 TCL电视 10
1 2012/1/3 002 格力空调 20
1 2012/1/4 002 格力空调 20
2 2012/2/8 002 格力空调 30
...
用SELECT 语句怎么实现以下结果:
编码------名称--------1月份-----2月份------3月份....
001 TCL电视 11 10
002 格力空调 40 30
............................................................................
解决方案 »
- 为什么select CONVERT(char(5),dateadd(year, 3 ,'2012-11-01'),110) 得出的结果是11-01 啊
- sql 2005 安装问题
- RowFilter 中如何使用left()函数
- c++连接 mssql2005问题,急!!!!
- 字段为保存66,68的数据要查询 提供未知数如66即不显示有66的数据
- SQL中的大小为什么比倒入到ACCESS中大
- 请求帮助
- 查询问题.关于sql关联查询。谢谢
- 简单的小问题请指教???
- 请教:采用联接查询和子查询在查询速度上有什么样的差异没?两者是否有真正意义上的差别否?
- 求助达人,用SQL语句如何返回不同分类的前几行记录呢?
- 用WCF连接SQL返回joson无法读取
GO
-->生成表in_stock
if object_id('in_stock') is not null
drop table in_stock
Go
Create table in_stock([mth] smallint,[indate] datetime,[stock_no] nvarchar(3),[stock_name] nvarchar(5),[qty] smallint)
Insert into in_stock
Select 1,'2012/1/2',N'001',N'TCL电视',5
Union all Select 1,'2012/1/5',N'001',N'TCL电视',6
Union all Select 2,'2012/2/6',N'001',N'TCL电视',10
Union all Select 1,'2012/1/3',N'002',N'格力空调',20
Union all Select 1,'2012/1/4',N'002',N'格力空调',20
Union all Select 2,'2012/2/8',N'002',N'格力空调',30
DECLARE @col NVARCHAR(MAX)
SELECT
@col=ISNULL(@col+',','')+'SUM(CASE WHEN mth='+LTRIM(mth)+' THEN qty END) As ['+LTRIM(mth)+'月份]'
FROM in_stock
GROUP BY mth
EXEC ( N'SELECT [stock_no] As 编码,[stock_name] As 名称,'+@col+' FROM in_stock GROUP BY [stock_no],[stock_name]' )
/*
编码 名称 1月份 2月份
---- ----- ----------- -----------
001 TCL电视 11 10
002 格力空调 40 30
*/
1月份,sum(case when mth=2 then jksl end) 2月份 from in_stock
group by stock_no,stock_na
select @sql=isnull(@sql+',','')+'sum(case when mth='+ convert(varchar(2),mth)+' then qty else 0 end) '''+ convert(varchar(2),mth)+'月份'''
from in_stock group by mth
exec('select [stock_no] 编码,[stock_name] 名称,'+@sql+' from in_stock group by stock_name, stock_no')
select @sql=isnull(@sql,'')+',sum(case when mth='+rtrim(mth)+' then qty else 0 end)月份'+rtrim(mth) from (select distinct mth from tb)t
set @sql='select stock_no,stock_name'+@sql+' from tb group by stock_no,stock_name'
exec (@sql)
修改一下select stock_no,stock_name,sum(case when mth=1 then qty end) '1月份',sum(case when mth=2 then qty end) '2月份' from in_stock group by stock_no,stock_name