22,210
社区成员
发帖
与我相关
我的任务
分享
declare @sql varchar(2000)
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 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
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
*/
select stock_no,stock_na,sum(case when mth=1 then jksl end)
1月份,sum(case when mth=2 then jksl end) 2月份 from in_stock
group by stock_no,stock_na