腳本列轉行
『壹』 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)的圖形顯示或其它報表,這種信息在你的日常運營決策過程中可以發揮核心作用
【容錯和安全】
內置了登錄用戶和許可權管理模塊,包括用戶賬戶體系管理、角色許可權管理、數據許可權管理,許可權設置模板提供了對機構及用戶的添加、刪除、管理等功能,提供了對用戶許可權的設置功能,從登錄、設計、發布、數據許可權等