• 爱情文章
  • 亲情文章
  • 友情文章
  • 生活随笔
  • 校园文章
  • 经典文章
  • 人生哲理
  • 励志文章
  • 搞笑文章
  • 心情日记
  • 英语文章
  • 范文大全
  • 作文大全
  • 新闻阅读
  • 当前位置: 山茶花美文网 > 生活随笔 > 正文

    [SQL存储过程实现SPSS交叉表]sqlserver存储过程

    时间:2020-05-29来源:山茶花美文网 本文已影响 山茶花美文网手机站

    SP代码:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 /****** Object: StoredProcedure [dbo].[Pro_CrossTable] Script Date: 03/27/2014 20:46:38 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[Pro_CrossTable] ( @tableName nvarchar(255) ,@colName1 nvarchar(255) ,@colName2 nvarchar(255) ) as -- ============================================= -- Author: -- Create date: 03/27/2014 -- 标题 : 交叉表算法实现 -- 调用 : --DECLARE @return_value int --EXEC @return_value = [dbo].[Pro_CrossTable] -- @tableName = N"temp_A063", --表名 -- @colName1 = N"ageArrange", --列名1(转置列) -- @colName2 = N"indate" --列名2 --SELECT "Return Value" = @return_value --GO -- ============================================= begin begin try begin tran begin -- select * from Temp_CrossTable_001 if object_id(N"[Temp_CrossTable_001]",N"U") is not null begin drop table [Temp_CrossTable_001] end CREATE TABLE [dbo].[Temp_CrossTable_001]( [colName1] [nvarchar](500) NULL, [colName2] [nvarchar](500) NOT NULL, [Value] [float] NULL ) ON [PRIMARY] ; exec(" insert into Temp_CrossTable_001 select "+@colName1+" ,"+@colName2+" ,count(*) from "+@tableName+" where "+@colName1+" is not null group by "+@colName1+","+@colName2+" ") end declare @str nvarchar(2000),@str1 nvarchar(500),@str2 nvarchar(500),@str3 nvarchar(500),@str4 nvarchar(500) select @str1=stuff((select ", "+colName1 from (select distinct 1 as ID , "["+colName1+"]" as colName1 from Temp_CrossTable_001) t where id=t.id for xml path("")),1,1,"") from (select distinct 1 as ID , "["+colName1+"]" as colName1 from Temp_CrossTable_001) t group by id ; select @str2=stuff((select ", "+colName1 from (select distinct "sum_col" as ID , "sum(["+colName1+"])" as colName1 from Temp_CrossTable_001) t where id=t.id for xml path("")),1,1,"") from (select distinct "sum_col" as ID , "sum(["+colName1+"])" as colName1 from Temp_CrossTable_001) t group by id ; select @str3=stuff((select "+ "+colName1 from (select distinct 1 as ID , "["+colName1+"]" as colName1 from Temp_CrossTable_001) t where id=t.id for xml path("")),1,1,"") from (select distinct 1 as ID , "["+colName1+"]" as colName1 from Temp_CrossTable_001) t group by id ; select @str4=stuff((select ", "+colName1 from (select distinct 1 as ID , "t1.["+colName1+"], t1.["+colName1+"]/convert(float,t2.["+colName1+"]) as [N%]" as colName1 from Temp_CrossTable_001) t where id=t.id for xml path("")),1,1,"") from (select distinct 1 as ID , "t1.["+colName1+"], t1.["+colName1+"]/convert(float,t2.["+colName1+"]) as [N%]" as colName1 from Temp_CrossTable_001) t group by id ; set @str = (" if object_id(N""[Out_CrossTable_Value]"",N""U"") is not null begin drop table Out_CrossTable_Value end SELECT *,"+@str3+" as sum_row into Out_CrossTable_Value FROM( select convert(nvarchar(255),colName1) as colName1,convert(nvarchar(255),colName2) as colName2,Value from Temp_CrossTable_001 m ) P PIVOT ( SUM(Value) FOR colName1 IN ("+ @str1 +") ) AS T union all select ""sum_col""," + @str2 + " , sum([sum_row]) from ( SELECT *,"+@str3+" as sum_row FROM( select convert(nvarchar(255),colName1) as colName1,convert(nvarchar(255),colName2) as colName2,Value from Temp_CrossTable_001 m ) P PIVOT ( SUM(Value) FOR colName1 IN ("+ @str1 +") ) AS T ) t ") exec (@str) set @str =" --if object_id(N""[Out_CrossTable_Percent]"",N""U"") is not null begin drop table [Out_CrossTable_Percent] end select t1.colName2 as "+@colName2+" , "+@str4+" --into Out_CrossTable_Percent from Out_CrossTable_Value t1 ,( select "+@str1+" from Out_CrossTable_Value where colName2=""sum_col"") t2 " exec (@str) --------------------------------------结果: --select * from Out_CrossTable_Percent commit tran return 0 end try begin catch rollback tran return 1 end catch end

    调用SP:

    SQL存储过程实现SPSS交叉表1

    • [SQL存储过程实现SPSS交叉表]sqlserver存储过程 相关文章:
    • 爱情文章
    • 亲情文章
    • 友情文章
    • 随笔
    • 哲理
    • 励志
    • 范文大全