请教一个合并计算的SQL语句?

wisesuperman 2012-12-29 10:57:38
有一个表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
............................................................................
...全文
214 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy_liucj 2012-12-30
  • 打赏
  • 举报
回复
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')
ether030 2012-12-30
  • 打赏
  • 举报
回复
引用 2 楼 sqlkxr 的回复:
SQL code ? 12345 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
修改一下
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
  • 打赏
  • 举报
回复
declare @sql nvarchar(1000) 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)
我腫了 2012-12-29
  • 打赏
  • 举报
回复
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
*/
daishaodong 2012-12-29
  • 打赏
  • 举报
回复
Group by 语句可以。
sqlkxr 2012-12-29
  • 打赏
  • 举报
回复


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

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧