脚本列转行
‘壹’ sql2000行转列于列转行问题,急~~~ (部门是不确定几个的)
静态脚本:
select '当月入职人数' as 项目
, case when 部门='行政部' then 当月入职人数 else null end as 行政部
, case when 部门='技术部' then 当月入职人数 else null end as 技术部
from 表名
union all
select '当月离职人数' as 项目
, case when 部门='行政部' then 当月离职人数 else null end as 行政部
, case when 部门='技术部' then 当月离职人数 else null end as 技术部
from 表名
union all
select '当月在职人数' as 项目
, case when 部门='行政部' then 当月在职人数 else null end as 行政部
, case when 部门='技术部' then 当月在职人数 else null end as 技术部
from 表名
改动态脚本(只改部门,即改原表行不定,列数目固定):
declare @sql nvarchar(4000)
set @sql=''
set @sql=@sql+'
select ''当月入职人数'' as 项目
'
select @sql=@sql+', case when 部门='''+部门+''' then 当月入职人数 else null end as '+部门
from 表名
set @sql=@sql+'
from 表名
'
set @sql=@sql+'union all
select ''当月离职人数'' as 项目
'
select @sql=@sql+', case when 部门='''+部门+''' then 当月离职人数 else null end as '+部门
from 表名
set @sql=@sql+'
from 表名
'
set @sql=@sql+'union all
select ''当月在职人数'' as 项目
'
select @sql=@sql+', case when 部门='''+部门+''' then 当月在职人数 else null end as '+部门
from 表名
set @sql=@sql+'
from 表名
'
exec sp_executesql @sql
改动态脚本(改原表行和列数目不固定,两层动态脚本,能实现但基本难读):
declare @sql nvarchar(4000)
set @sql='declare @sql_in nvarchar(4000)
set @sql_in='' '' '
set @sql=@sql+'select @sql_in=@sql_in+''union all
select ''''''+name+'''''' as 项目
'
select @sql=@sql+', case when 部门='''''+部门+''''' then ''+name+'' else null end as '+部门
from 表名
set @sql=@sql+'
from 表名
''
from syscolumns where id=(select id from sysobjects where name=''表名'')
order by colorder
set @sql_in=stuff(@sql_in,1,10,'''')
exec sp_executesql @sql_in
'
exec sp_executesql @sql
由于是sql2000,nvarchar类型只能最多4000个字,如果你部门太多,动态脚本长度肯定是不行的
‘贰’ 写一个SQL语句,根据表A生成表B
这样:
1.使用查询分析器或企业管理器生成要复制表的较完整的脚本。
所谓完整,要在脚本选项中设置包括约束、自增加等所需脚本。
2.复制脚本到存储过程或查询分析器,更改表名和约束名为新表名和约束名。
3.执行脚本。
4.使用INSERT INTO NEWTABLENAME FROM OLDTABLENAME 将数据添加到新表.
‘叁’ sql2000 同时实现行转列和列转行 求高人
use Tempdb
go
--> -->
if not object_id(N'Tempdb..#1') is null
drop table #1
Go
Create table #1([姓名] nvarchar(1),[月份] int,[吃饭] int,[唱歌] int,[游戏] int)
Insert #1
select N'a',1,10,10,10 union all
select N'a',2,11,11,11 union all
select N'a',3,41,41,21 union all
select N'b',1,21,31,11 union all
select N'b',2,11,1,11
Go
DECLARE @s NVARCHAR(4000)
SET @s=N'select 姓名,序号,类型'
SELECT @s=@s+','+QUOTENAME(RTRIM([月份])+N'月')+'=max(case when [月份]='+RTRIM([月份])+' then Value end)' FROM #1 GROUP BY [月份]
EXEC(@s+N' from (Select [姓名],[月份],[序号]=1,[类型]=N''吃饭'',[吃饭] AS Value from #1
UNION ALL
Select [姓名],[月份],[序号]=2,[类型]=N''唱歌'',[唱歌] AS Value from #1
UNION ALL
Select [姓名],[月份],[序号]=3,[类型]=N''游戏'',[游戏] AS Value from #1)T
group by 姓名,序号,类型')
/*
姓名 序号 类型 1月 2月 3月
a 1 吃饭 10 11 41
a 2 唱歌 10 11 41
a 3 游戏 10 11 21
b 1 吃饭 21 11 NULL
b 2 唱歌 31 1 NULL
b 3 游戏 11 11 NULL
*/
--动态生成的脚本
select 姓名,序号,类型,[1月]=max(case when [月份]=1 then Value end),[2月]=max(case when [月份]=2 then Value end),[3月]=max(case when [月份]=3 then Value end) from (Select [姓名],[月份],[序号]=1,[类型]=N'吃饭',[吃饭] AS Value from #1
UNION ALL
Select [姓名],[月份],[序号]=2,[类型]=N'唱歌',[唱歌] AS Value from #1
UNION ALL
Select [姓名],[月份],[序号]=3,[类型]=N'游戏',[游戏] AS Value from #1)T
group by 姓名,序号,类型
‘肆’ sql语句列转行
--方法对了,其实超级容易,下面给你一个例子,实际的请自己改写一下,以下代码可以在sql server中执行,返回的就是你要的结果
--将你的数据存入表
declare @a table(ii varchar(10),jj varchar(10))
insert into @a values('c_003','套餐A')
insert into @a values('c_004','49')
insert into @a values('c_005','300')
insert into @a values('c_003','套餐B')
insert into @a values('c_004','59')
insert into @a values('c_005','700')
--检索一下,看是否是正确的
select * from @a
--将数据行做成列表
declare @b table(c_003 varchar(10),c_004 varchar(10),c_005 varchar(10))
--定义游标完成数据转换
declare cur_a_b cursor for select ii,jj from @a
declare @i int --定义步长,方便以3为不同的步长
set @i=0
declare @ii varchar(10)
declare @jj varchar(10)
--临时的c_003变量
declare @fn varchar(20)
--打开游标
open cur_a_b
fetch next from cur_a_b into @ii,@jj
while @@fetch_status = 0
begin
if @i % 3 = 0
begin
set @fn = @jj
insert into @b(c_003) values(@fn)
end
if @i % 3 = 1 update @b set c_004=@jj where c_003=@fn
if @i % 3 = 2 update @b set c_005=@jj where c_003=@fn
set @i = @i + 1
fetch next from cur_a_b into @ii,@jj
end
close cur_a_b
deallocate cur_a_b
--最终结果
select * from @b
--呵呵,写了这么多也不容易,加点分吧
‘伍’ kettle 实现列转行,行专列,源码如何debug跟踪调试
本文主要记录kettle列转行控件的使用。
1、用例脚本
create TABLE studentInfo
(
studentno int,
Cname varchar(10),
grade int
);
insert into studentInfo values(2018100,'语文',81);
insert into studentInfo values(2018100,'数学',82);
insert into studentInfo values(2018100,'英语',83);
insert into studentInfo values(2018101,'语文',71);
insert into studentInfo values(2018101,'数学',71);
insert into studentInfo values(2018101,'英语',72);
insert into studentInfo values(2018102,'语文',91);
insert into studentInfo values(2018102,'数学',92);
insert into studentInfo values(2018102,'英语',93);
INSERT INTO studentInfo VALUES(2018103,'语文',60);
INSERT INTO studentInfo VALUES(2018103,'数学',61);
INSERT INTO studentInfo VALUES(2018103,'英语',94);
commit;
————————————————
‘陆’ 用shell完成列转行
先出个笨办法,抛砖引玉吧。
假设log存储在log.txt, 处理脚本为col2line.sh.
root@ubuntu:~/share/shfiles# cat col2line.sh
#!/bin/bash
declare -i i=0
file=$(cat $1)
for col in $file; do
i=i+1
if [ $i -eq 1 ]; then
col1=$col
elif [ $i -eq 2 ]; then
col2=$col
elif [ $i -eq 3 ] ; then
echo -ne "$col1 $col2 $col"
echo
i=0
fi
done
root@ubuntu:~/share/shfiles# ./col2line.sh log.txt
16:23:00 8.2% 1773620k
16:23:01 3% 1770024k
16:23:02 5.7% 1766272k
16:23:03 4% 1766160k
16:23:04 7.9% 1775436k
16:23:05 2.5% 1775488k
16:23:06 3.9% 1770340k
root@ubuntu:~/share/shfiles#
刚才又想出一种稍微简单的方法:
#!/bin/bash
while read col1 && read col2 && read col3; do
echo -ne "$col1 $col2 $col3"
echo
done <$1
‘柒’ 如何建设教育强县的意见
教育大数据平台
教育大数据平台是区域教育局层级的一个面向大数据的应用系统集成产品,以数据驱动为核心、建立数据标准、形成基础数据库、提供单点登录、集成现有系统数据形成教育大数据,利用教育大数据进行分析与决策的重要平台。
通过建立教育大数据平台,能够有效集中地管控海量的教育数据,为政府打造“数据铁笼”、构建权责清单、实现工作监管、支撑绩效考核等工作提供条件,并以此为基础,构建政府宏观管理、学校自主办学、社会广泛参与、职能边界清晰、多元主体“共治”的格局,通过满足不同用户对象(学生、教师、家长、教育管理者等)的需求,使教、学、管、评、考等各个维度更加泛在化、精细化、个性化、高效化,积累数据,为教育持续发展打下坚实的基础,满足大数据时代对教育提出的更高要求。
产品功能
【数据整合】
数据中心按照预定义的业务数据接口从各大业务系统进行数据收集、采集、数据的清洗、审核评估、数据加工处理后进行分类存储。
支撑采集脚本、终端设备,数据接口等多种数据对接与多种数据格式如:文本数据、数据库数据、日志数据、xml与excel多种异构数据源的接入。支持实时数据与离线数据采集。提供元数据探寻与收集与灵活的数据质量稽核规则。支持全量数据与增量数据的采集、存储。考虑用户规模与数据规模的增长,做好数据资产积累的准备。
【数据对接】
数据源对接包含主动数据抽取、数据填报、流方式、批量导入方式、外部数据文件导入、异构数据库导入、增量追加方式、网上爬虫方式等。平台提供丰富的数据集成接口,数据源包括各应用系统数据接入、互联网数据采集、外部临时数据导入支持等。数据格式主要包含文本文件,XML等多种方式。传输频次包含非实时、准实时、实时形式。数据形态包括结构化数据、半结构化数据、非结构化数据。
【数据处理】
负责将分布的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后进行清洗、转换、集成,最后加载到数据库或数据集市中,成为联机分析处理、数据挖掘的基础。
系统提供新增字段,现有字段可以进行表达式和公式处理,表达式和公式默认支持同期、累计、时间进度、行转列、列转行、分组合计、占比、完成率、去重计数、经纬度和时间转换等多种。
【图表可视化分析】
数据可视化工具是使分析不再局限于通过关系数据表来观察和分析数据信息,还能以更直观的方式看到数据及其结构关系。数据可视化技术的基本思想是将数据库中每一个数据项作为单个实体元素表示,大量的实体元素集构成数据图像,通过数据可视化引擎提供的方法,针对图中关键实体进行关联、回溯、扩展、布局、缩放等操作,从不同的视角观察数据,从而对数据进行更深入的研究和分析。
【GIS可视化分析】
平台引入地理空间、大数据分析等新兴理念和技术,实现地理空间库与学校、学生的有机结合,构建空间数据“一张图”,打造空间可视化分析、数据集成化分析、成为提升区域教育决策和教育质量的基础。
技术优势
【易用性】
系统采用简洁、直观、友好的图形化界面,运营人员通过拖拽和配置等操作快速完成日常报表的设计和实现。一般经过短期的培训可以熟练的上岗操作并能完成日常的系统维护工作。学习成本低,产品上手快,操作简便、快速。
自助式分析提供灵活方便的操作界面,允许用户任意选择指标、维度和过滤条件等,快速生成多维分析表、查询结果、统计图形等。
【移动性】
系统采用H5的模式保证适配性,用户分别可通过浏览器、手机、平板电脑等多途径,通过在线和离线的方式对自己权限范围内的报表进行浏览访问。
用户通过手机可以快速进行报表的分析和修正,随时随地看到实时分析数据,达到移动决策和分析的目的。移动 BI 与 PC 上的展现可以完美的无缝对接,支持一套报表多平台使用。
【可扩展性】
扩展性包括两方面,一方面系统根据数据量的变化以及访问量的变化进行动态扩展,集群设计和分布式保证了扩展性。第二方面系统提供了大量的开放接口,用户可以根据自己的需求增加数据源、可视化组件、报表模板等,便于系统应用快速开展。
【嵌入式分析】
系统通过提供提供完整的开放API接口以及嵌入模型,与现有应用系统完美融合,可以在现有应有平台点击几下鼠标和敲击几下键盘之中得到电子表格、关键业绩指标(KPI)的图形显示或其它报表,这种信息在你的日常运营决策过程中可以发挥核心作用
【容错和安全】
内置了登录用户和权限管理模块,包括用户账户体系管理、角色权限管理、数据权限管理,权限设置模板提供了对机构及用户的添加、删除、管理等功能,提供了对用户权限的设置功能,从登录、设计、发布、数据权限等