有一个表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
............................................................................
如果要自定义函数,怎么定义这个函数?
------解决方案--------------------
USE test
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
*/