数据旋转90度

yanglinqiang 2010-08-02 04:35:24
yue 新发展客户 成交客户 失败客户
---------------------------- ----------- ----------- -----------
2010年8月 0 0 0
2010年7月 2 0 0
2010年6月 0 0 0
2010年5月 0 0 0
2010年4月 0 0 0
2010年3月 0 0 0
2010年2月 0 0 0
2010年1月 0 0 0
2009年12月 0 0 0
2009年11月 0 0 0
2009年10月 0 0 0
2009年9月 0 0 0
2009年8月 0 0 0
2009年7月 0 0 0


想让出来三行十四列,怎么实现?
...全文
136 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuyu622 2010-08-02
  • 打赏
  • 举报
回复
你应该用行列转换,有自带的,google去吧。
百年树人 2010-08-02
  • 打赏
  • 举报
回复
---测试数据---
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([yue] varchar(10),[新发展客户] int,[成交客户] int,[失败客户] int)
insert [tb]
select '2010年8月',0,0,0 union all
select '2010年7月',2,0,0 union all
select '2010年6月',0,0,0 union all
select '2010年5月',0,0,0 union all
select '2010年4月',0,0,0 union all
select '2010年3月',0,0,0 union all
select '2010年2月',0,0,0 union all
select '2010年1月',0,0,0 union all
select '2009年12月',0,0,0 union all
select '2009年11月',0,0,0 union all
select '2009年10月',0,0,0 union all
select '2009年9月',0,0,0 union all
select '2009年8月',0,0,0 union all
select '2009年7月',0,0,0

---查询---
declare @sql1 varchar(8000),@sql2 varchar(8000),@sql3 varchar(8000)
select
@sql1=isnull(@sql1+',','select ''新发展客户'' as type,')
+'sum(case when yue='''+yue+''' then 新发展客户 else 0 end) as ['+yue+']'
from
(select distinct yue from tb) t
select
@sql2=isnull(@sql2+',','select ''成交客户'' as type,')
+'sum(case when yue='''+yue+''' then 成交客户 else 0 end) as ['+yue+']'
from
(select distinct yue from tb) t
select
@sql3=isnull(@sql3+',','select ''失败客户'' as type,')
+'sum(case when yue='''+yue+''' then 失败客户 else 0 end) as ['+yue+']'
from
(select distinct yue from tb) t

exec (@sql1+' from tb union all '+@sql2+' from tb union all '+@sql3+' from tb')


---结果---
type 2009年10月 2009年11月 2009年12月 2009年7月 2009年8月 2009年9月 2010年1月 2010年2月 2010年3月 2010年4月 2010年5月 2010年6月 2010年7月 2010年8月
---------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
新发展客户 0 0 0 0 0 0 0 0 0 0 0 0 2 0
成交客户 0 0 0 0 0 0 0 0 0 0 0 0 0 0
失败客户 0 0 0 0 0 0 0 0 0 0 0 0 0 0

(3 行受影响)
htl258_Tony 2010-08-02
  • 打赏
  • 举报
回复
--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([yue] [nvarchar](10),[新发展客户] [int],[成交客户] [int],[失败客户] [int])
INSERT INTO [tb]
SELECT '2010年8月','0','0','0' UNION ALL
SELECT '2010年7月','2','0','0' UNION ALL
SELECT '2010年6月','0','0','0' UNION ALL
SELECT '2010年5月','0','0','0' UNION ALL
SELECT '2010年4月','0','0','0' UNION ALL
SELECT '2010年3月','0','0','0' UNION ALL
SELECT '2010年2月','0','0','0' UNION ALL
SELECT '2010年1月','0','0','0' UNION ALL
SELECT '2009年12月','0','0','0' UNION ALL
SELECT '2009年11月','0','0','0' UNION ALL
SELECT '2009年10月','0','0','0' UNION ALL
SELECT '2009年9月','0','0','0' UNION ALL
SELECT '2009年8月','0','0','0' UNION ALL
SELECT '2009年7月','0','0','0'

--SELECT * FROM [tb]

-->SQL查询如下:
DECLARE @c VARCHAR(MAX)
SET @c=STUFF((SELECT ','+QUOTENAME(yue) FROM tb ORDER BY LEFT(yue,4) DESC,REPLACE(STUFF(yue,1,5,''),'月','')*1 DESC FOR XML PATH('')),1,1,'')

EXEC('
SELECT *
FROM tb
UNPIVOT(val FOR col IN (新发展客户,成交客户,失败客户)) b
PIVOT(MAX(val) FOR yue IN('+@c+')) c
ORDER BY CHARINDEX(LEFT(col,1),''新成失'')
')
/*
col 2010年8月 2010年7月 2010年6月 2010年5月 2010年4月 2010年3月 2010年2月 2010年1月 2009年12月 2009年11月 2009年10月 2009年9月 2009年8月 2009年7月
新发展客户 0 2 0 0 0 0 0 0 0 0 0 0 0 0
成交客户 0 0 0 0 0 0 0 0 0 0 0 0 0 0
失败客户 0 0 0 0 0 0 0 0 0 0 0 0 0 0
*/
排序一下
htl258_Tony 2010-08-02
  • 打赏
  • 举报
回复
--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([yue] [nvarchar](10),[新发展客户] [int],[成交客户] [int],[失败客户] [int])
INSERT INTO [tb]
SELECT '2010年8月','0','0','0' UNION ALL
SELECT '2010年7月','2','0','0' UNION ALL
SELECT '2010年6月','0','0','0' UNION ALL
SELECT '2010年5月','0','0','0' UNION ALL
SELECT '2010年4月','0','0','0' UNION ALL
SELECT '2010年3月','0','0','0' UNION ALL
SELECT '2010年2月','0','0','0' UNION ALL
SELECT '2010年1月','0','0','0' UNION ALL
SELECT '2009年12月','0','0','0' UNION ALL
SELECT '2009年11月','0','0','0' UNION ALL
SELECT '2009年10月','0','0','0' UNION ALL
SELECT '2009年9月','0','0','0' UNION ALL
SELECT '2009年8月','0','0','0' UNION ALL
SELECT '2009年7月','0','0','0'

--SELECT * FROM [tb]

-->SQL查询如下:
DECLARE @c VARCHAR(MAX)
SET @c=STUFF((SELECT ','+QUOTENAME(yue) FROM tb ORDER BY LEFT(yue,4) DESC,REPLACE(STUFF(yue,1,5,''),'月','')*1 DESC FOR XML PATH('')),1,1,'')

EXEC('
SELECT *
FROM tb
UNPIVOT(val FOR col IN (新发展客户,成交客户,失败客户)) b
PIVOT(MAX(val) FOR yue IN('+@c+')) c
')
/*
col 2010年8月 2010年7月 2010年6月 2010年5月 2010年4月 2010年3月 2010年2月 2010年1月 2009年12月 2009年11月 2009年10月 2009年9月 2009年8月 2009年7月
成交客户 0 0 0 0 0 0 0 0 0 0 0 0 0 0
失败客户 0 0 0 0 0 0 0 0 0 0 0 0 0 0
新发展客户 0 2 0 0 0 0 0 0 0 0 0 0 0 0
*/
天-笑 2010-08-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pt1314917 的回复:]
SQL code
--> 测试数据: [tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb] (yue varchar(10),新发展客户 int,成交客户 int,失败客户 int)
insert into [tb]
select '2010年8月',0,0,0 union all
select ……
[/Quote]

赞一个
pt1314917 2010-08-02
  • 打赏
  • 举报
回复
--> 测试数据: [tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb] (yue varchar(10),新发展客户 int,成交客户 int,失败客户 int)
insert into [tb]
select '2010年8月',0,0,0 union all
select '2010年7月',2,0,0 union all
select '2010年6月',0,0,0 union all
select '2010年5月',0,0,0 union all
select '2010年4月',0,0,0 union all
select '2010年3月',0,0,0 union all
select '2010年2月',0,0,0 union all
select '2010年1月',0,0,0 union all
select '2009年12月',0,0,0 union all
select '2009年11月',0,0,0 union all
select '2009年10月',0,0,0 union all
select '2009年9月',0,0,0 union all
select '2009年8月',0,0,0 union all
select '2009年7月',0,0,0
go

declare @f1 varchar(8000),@f2 varchar(8000),@f3 varchar(8000)
select @f1='',@f2='',@f3=''
select @f1=@f1+',['+yue+']='''+ltrim(新发展客户)+''''
,@f2=@f2+','''+ltrim(成交客户)+''''
,@f3=@f3+','''+ltrim(失败客户)+''''
from tb
exec('select 类型=''新发展客户'''+@f1
+' union all select ''成交客户'''+@f2
+' union all select ''失败客户'''+@f3)
go

--结果:
类型 2010年8月 2010年7月 2010年6月 2010年5月 2010年4月 2010年3月 2010年2月 2010年1月 2009年12月 2009年11月 2009年10月 2009年9月 2009年8月 2009年7月
---------- ------- ------- ------- ------- ------- ------- ------- ------- -------- -------- -------- ------- ------- -------
新发展客户 0 2 0 0 0 0 0 0 0 0 0 0 0 0
成交客户 0 0 0 0 0 0 0 0 0 0 0 0 0 0
失败客户 0 0 0 0 0 0 0 0 0 0 0 0 0 0

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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