PIVOT前言技术??? 99CSDN]

发布时间:2014-1-1 0:09:56编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"PIVOT前言技术??? 99CSDN]",主要涉及到PIVOT前言技术??? 99CSDN]方面的内容,对于PIVOT前言技术??? 99CSDN]感兴趣的同学可以参考一下。

如何使用pivot? bm               year        monty         je 人事部           2006          1          1000 财务部           2006          1           90 网络部           2006          2          102 人事部           2006          4          89 ....             ...           .          ... 如何实现? bm            year           1         2     4      .    .    .    人事部        2006          1090       0     89     0   0     0 财务部        2006            90       0     0      0   0     0 网络部        2006            0        102   0      0   0     0        其中,month 不定

這是一個典型的交叉表案例,請參考下面的例子: create table tb(名稱 varchar(10),數量  numeric(10),類型 varchar(5)) Insert into tb  select 'L001','1','A' union all select 'L001','2','B' union all select 'L002','5','C' union all select 'L003','6','D' union all select 'L004','9','A' union all select 'L004','5','D' select * from tb declare @sql varchar(1000) set @sql='' select @[email protected]+',['+max(類型)+']=sum(case 類型 when '''+max(類型)+''' then 數量 else 0 end)' from tb group by 類型  print @sql exec('select [email protected]+' from  tb  group by 名稱') --結果 名稱      A       B        C        D --------------------------------------- L001 1 2 0 0 L002 0 0 5 0 L003 0 0 0 6 L004 9 0 0 5

use test  create table cross1( bm char(10), year1 char(5), month1 int, je int ) insert into cross1 select '人事部','2006',1,1000 union all select '财务部','2006',1,90 union all select '网络部','2006',2,102 union all select '人事部','2006',4,89 union all select '网络部','2006',12,1020 union all select '市场部','2006',8,102 select * from cross1 select a.bm ,isnull(a.[1],0) [一月],isnull(a.[2],0) [二月],a.[3] [三月],a.[4] [四月],a.[5] [五月], a.[6] [六月],a.[7] [七月],a.[8] [八月],a.[9] [九月],a.[10] [十月],a.[11] [十一月],a.[12] [十二月] from cross1 pivot(sum(je) for  month1 in([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) as a ----------------------- 结果: bm      一月  二月  三月  四月   五月  六月  七月  八月  九月  十月  十一月  十二月  财务部   90    0     null  null  null  null   null  null  null  null  null   null 人事部  1000   0     null  89    null  null   null  null  null   null  null  null 市场部   0     0     null  null  null  null   null  102   null   null   null  null 网络部   0    102    null  null  null  null   null  null  null   null   null  1020

少了个年份,加上 select a.bm ,a.year1,isnull(a.[1],0) [一月],isnull(a.[2],0) [二月],a.[3] [三月],a.[4] [四月],a.[5] [五月], a.[6] [六月],a.[7] [七月],a.[8] [八月],a.[9] [九月],a.[10] [十月],a.[11] [十一月],a.[12] [十二月] from cross1 pivot(sum(je) for  month1 in([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) as a

SELECT * FROM cross1 PIVOT (SUM(je)  FOR month1 IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) ) AS PIT

对不起,上面的兄弟,我想要的是列不固定的,所以不能给分

up

--借楼上的数据. create table cross1( bm char(10), year1 char(5), month1 int, je int ) insert into cross1 select '人事部','2006',1,1000 union all select '财务部','2006',1,90 union all select '网络部','2006',2,102 union all select '人事部','2006',4,89 union all select '网络部','2006',12,1020 union all select '市场部','2006',8,102 --动态SQL(PIVOT) DECLARE @S VARCHAR(8000) DECLARE @S1 VARCHAR(8000) SELECT @S='',@S1='' SELECT @[email protected]+',['+LTRIM(month1)+']',@[email protected]+',['+LTRIM(month1)+'月]=['+LTRIM(month1)+']'  FROM cross1 GROUP BY month1 SELECT @S=STUFF(@S,1,1,''),@S1=STUFF(@S1,1,1,'') EXEC(' SELECT 部门=BM,年份=year1,[email protected]+' FROM cross1 PIVOT (SUM(je)  FOR month1 IN ([email protected]+') ) AS PIT ') --结果 /* 部门         年份    1月          2月          4月          8月          12月 ---------- ----- ----------- ----------- ----------- ----------- ----------- 财务部        2006  90          NULL        NULL        NULL        NULL 人事部        2006  1000        NULL        89          NULL        NULL 市场部        2006  NULL        NULL        NULL        102         NULL 网络部        2006  NULL        102         NULL        NULL        1020 (4 行受影响) */ --删除环境 drop table cross1

--如果把NULL,显示为0 ,如下: DECLARE @S VARCHAR(8000) DECLARE @S1 VARCHAR(8000) SELECT @S='',@S1='' SELECT @[email protected]+',['+LTRIM(month1)+']',@[email protected]+',['+LTRIM(month1)+'月]=ISNULL(['+LTRIM(month1)+'],0)'  FROM cross1 GROUP BY month1 SELECT @S=STUFF(@S,1,1,''),@S1=STUFF(@S1,1,1,'') EXEC(' SELECT 部门=BM,年份=year1,[email protected]+' FROM cross1 PIVOT (SUM(je)  FOR month1 IN ([email protected]+') ) AS PIT ') /* 部门         年份    1月          2月          4月          8月          12月 ---------- ----- ----------- ----------- ----------- ----------- ----------- 财务部        2006  90          0           0           0           0 人事部        2006  1000        0           89          0           0 市场部        2006  0           0           0           102         0 网络部        2006  0           102         0           0           1020 (4 行受影响) */

@s超过8000个字符的该如何处理

@s超过8000个字符的该如何处理?? ------------->既然用的是 MS SQL Server 2005 .那你就这么定义变量 Varchar(max) 这样就解决超过 8000 的问题了. DECLARE @S VARCHAR(max) DECLARE @S1  VARCHAR(max) SELECT @S='',@S1='' SELECT @[email protected]+',['+LTRIM(month1)+']',@[email protected]+',['+LTRIM(month1)+'月]=ISNULL(['+LTRIM(month1)+'],0)'  FROM cross1 GROUP BY month1 SELECT @S=STUFF(@S,1,1,''),@S1=STUFF(@S1,1,1,'') EXEC(' SELECT 部门=BM,年份=year1,[email protected]+' FROM cross1 PIVOT (SUM(je)  FOR month1 IN ([email protected]+') ) AS PIT ') /* 部门         年份    1月          2月          4月          8月          12月 ---------- ----- ----------- ----------- ----------- ----------- ----------- 财务部        2006  90          0           0           0           0 人事部        2006  1000        0           89          0           0 市场部        2006  0           0           0           102         0 网络部        2006  0           102         0           0           1020 (4 行受影响) */

晕,是你问题没说明白,你早说要不固定的列啊,害的让楼下的给抢了.

ZLP:    请问如如果我想通过视图实现.该如何?

视图,那只能用第一种方法了.把所有类型你都必须列举出来. 因为视图中不允许申明变量.

收藏学习中.......

视图不可以,但可以使用table valued function


上一篇:有关SQL SERVER 报表服务与MOM2005SP1的问题(在线急等) 40CSDN]
下一篇:求看联机帮助的思路 20CSDN]

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款