現(xiàn)有需求:合并1-3月的所有數(shù)據(jù),并完成統(tǒng)計(jì)。
傳統(tǒng)的方法,我們可以在鍵盤上依次按著ALT, D P來使用多重?cái)?shù)據(jù)透視來實(shí)現(xiàn),但此法實(shí)在不夠靈活。
因此,我們同樣如之前的文章一樣,選擇SQL方法來提取數(shù)據(jù)作為透視表的數(shù)據(jù)源。
建立鏈接:數(shù)據(jù)--現(xiàn)有鏈接--瀏覽更多,根據(jù)路徑選擇目標(biāo)Excel文件即可。
依據(jù)路徑找到數(shù)據(jù)源文件:
先選擇其中一個(gè)工作表建立鏈接:
結(jié)果選擇用透視表的方式呈現(xiàn),點(diǎn)擊屬性寫入SQL語句:
select * from [1月$]
union all
select * from [2月$]
union all
select * from [3月$]
結(jié)果為:
拖拉數(shù)據(jù)透視表字段,完成布局,得出想要的結(jié)果:
1、SQL是數(shù)據(jù)庫常用的查詢語言,其基本要求就是數(shù)據(jù)得像數(shù)據(jù)庫一樣規(guī)范,但是往往在Excel中的數(shù)據(jù)都是不那么規(guī)范的;
2、* 表示整表全部數(shù)據(jù)的意思,如果1月、2月、3月,3個(gè)表格的數(shù)據(jù)其中有一個(gè)表格不規(guī)范,那么上面的SQL語句就不能夠生效。union all要求每個(gè)合并的表格字段數(shù),也就是列數(shù)一樣多,'*'表示所有的行和列,
3、使用'*'來提取數(shù)據(jù),對數(shù)據(jù)的要求比較嚴(yán)格;
4、解決方法,將'*'拆分成為限定為具體的字段,或(同時(shí))限定數(shù)據(jù)表格的范圍:
下面例子中,1月的表格多出了字段1這一列,如果使用'*'提取數(shù)據(jù)(上面的SQL代碼),將得不到結(jié)果:
因此,將'*'拆分,限定為具體的字段,SQL語句改為:
select 姓名,部門,月份,業(yè)績 from [1月$]
union all
select 姓名,部門,月份,業(yè)績 from [2月$]
union all
select 姓名,部門,月份,業(yè)績 from [3月$]
或限定數(shù)據(jù)表格范圍,取全部數(shù)據(jù)也取不到字段1這列數(shù)據(jù)
select * from [1月$a1:d]
union all
select * from [2月$a1:d]
union all
select * from [3月$a1:d]
總之,在Excel中使用SQL,數(shù)據(jù)最好最好要規(guī)范(不帶合并單元格,數(shù)據(jù)類型一致等等)。
聯(lián)系客服