當前位置:首頁 » 編程語言 » sql查詢兩張excel表
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql查詢兩張excel表

發布時間: 2022-05-08 05:51:53

㈠ Excel VBA sql如何多表聯合查詢

select abcg.型號,階段,生產日期,生產數,不良數,銷售日期,銷售數量 from (select abc.型號,階段,日期,生產日期,生產數,不良數 from (select a.型號,階段,日期 from [表A$] a left join (select 型號,生產日期 as 日期 from [表B$] UNION select 型號,銷售日期 as 日期 from [表C$]) bc on a.型號=bc.型號) abc left join (select 型號,生產日期,SUM(生產數) AS 生產數,SUM(不良數) AS 不良數 from [表B$] group by 型號,生產日期) bg ON abc.型號=bg.型號 and abc.日期=bg.生產日期) abcg left join (select 型號,銷售日期,SUM(銷售數量) AS 銷售數量 from [表C$] group by 型號,銷售日期) cg on abcg.型號=cg.型號 and abcg.日期=cg.銷售日期 order by abc.型號,abc.日期

㈡ 利用SQL語句整和同文件中多張EXCEL數據

每張表的列數,或者類型不一致,union all關聯的表查詢類型必須一致的,列數也必須一致:
比如:
tb1 只有一個欄位a 類型是整型
tb2 只有一個欄位a 類型是字元型
tb3 有兩個欄位a(整型),b(字元型)
tb4 只有一個欄位c 類型是整型

SELECT * FROM tb1 UNION ALL SELECT * FROM tb2 這行會報錯
SELECT * FROM tb1 UNION ALL SELECT * FROM tb4 這行不會報錯,正常執行
SELECT * FROM tb1 UNION ALL SELECT a FORM tb3 這行不會報錯,正常
SELECT * FROM tb2 UNION ALL SELECT b FROM tb3 這行會報錯
SELECT * FROM tb2 UNION ALL SELECT b AS a FROM tb3 這行不會報錯,正常

你應該能看懂其中的規律,如果不明白就追問

㈢ Excel中如何用SQL進行多工作簿匯總

對於經常使用Excel的人來說,在Excel中使用SQL能高效處理你的數據,但據我所知Excel中的SQL語法與MySQL數據的語法還有點不一樣。現在我就來實例說明如何用SQL語句對多個工作簿進行匯總。假如我們要匯總如下三個工作簿

1. 學生信息表

2. 學生成績表

3. 學生興趣表

將這三個工作簿按相同學號進行合並,大致分如下幾步:

1. 載入數據

在Excel中,依次點擊:數據-自其它來源-來自Microsoft Query-Excel Files*

然後再找到你Excel表格的存放目錄,如下圖

點擊下面你要載入的Excel數據表,進入下面頁面

將上圖可用的三張表都加入到右邊查詢結果中的列,加入完成後點擊下一步,數據就載入完成了。

2. 編寫SQL代碼並執行

接下來點擊上面的SQL按鈕開始寫SQL合並代碼。單純的合並代碼如下

SELECT

tm.*,

tn.興趣愛好 AS 興趣愛好

FROM(

SELECT

ta.學號 AS 學號,

ta.姓名 AS 姓名,

ta.年齡 AS 年齡,

ta.性別 AS 性別,

ta.身高 AS 身高,

ta.出生地 AS 出生地,

tb.語文成績 AS 語文成績,

tb.數學成績 AS 數學成績

FROM(

SELECT

tt.學號 AS 學號,

tt.姓名 AS 姓名,

tt.年齡 AS 年齡,

tt.性別 AS 性別,

tt.身高 AS 身高,

tt.出生地 AS 出生地

FROM [學生基本信息表$] tt

)ta

INNER JOIN(

SELECT

tt.學號 AS 學號,

tt.語文成績 AS 語文成績,

tt.數學成績 AS 數學成績

FROM [學生成績表$] tt

)tb

ON ta.學號=tb.學號

)tm

INNER JOIN(

SELECT

tt.學號 AS 學號,

tt.興趣愛好 AS 興趣愛好

FROM [學生興趣表$] tt

)tn

ON tm.學號=tn.學號

將代碼寫好後復制放入文本框中,點擊確定按鈕,就開始執行SQL語句。結果如下

這樣就完成了三個工作簿的數據合並,接下來將數據返回Excel表。

3. 返回數據到Excel表

點擊左上角的文件-將數據返回Microsoft Excel,彈出如下頁面

選擇數據的存放位置為新工作表,然後點擊確定即可,最終得到如下數據表

這樣就完成了三個工作簿的數據合並。

Tips:

1. 由於Excel中執行SQL語句時沒有比較詳細的報錯信息,如果SQL代碼語法有錯誤有可能執行會報錯,這個問題可以上網查詢或者直接在評論區問我。

2. 在Excel SQL中常用到的合並操作有INNER JOIN、LEFT JOIN、RIGHT JOIN、UNION、UNION ALL等,但不支持FULL JOIN。更復雜的需求都有一定的處理技巧。

㈣ 如何在兩個EXCEL表中多條件查詢

根據你的條件,我做了一下:
edit1:
學號,
edit2:
職務,
edit3:
籍貫,edit4:
面貌.與你的條件有些出入的地方是:我添加了一個radiogroup控制項來讓用戶選擇,是按學號查詢還是按其他類別查詢.
當選擇按學號查詢時,其它按鈕不可用;按其它查詢,edit1不可用(這個你自己可以設置是否可用.)如果edit2等中有內容即被當作查詢條件,如果為空則不作查詢條件.
代碼大致如下:
//控制按鈕是否可用:
procere
TForm1.RadioGroup1Click(Sender:
TObject);
begin
case
radiogroup1.ItemIndex
of
0:
begin
radiobutton1.Enabled
:=
false;
radiobutton2.Enabled
:=
false;
datetimepicker1.Enabled
:=
false;
datetimepicker2.Enabled
:=
false;
edit2.Enabled
:=
false;
edit3.Enabled
:=
false;
edit4.Enabled
:=
false;
end;
1:
begin
edit1.Enabled
:=
false;
radiobutton1.Enabled
:=
true;
radiobutton2.Enabled
:=
true;
datetimepicker1.Enabled
:=
true;
datetimepicker2.Enabled
:=
true;
edit2.Enabled
:=
true;
edit3.Enabled
:=
true;
edit4.Enabled
:=
true;
end;
end;
查詢按鈕
procere
TForm1.Button1Click(Sender:
TObject);
var
sql,
v_sex
:
string;
begin
if
radiogroup1.ItemIndex
=
0
then//按學號查詢
begin
with
adoquery1
do
begin
close;
sql.Clear;
sql.Add('select
*
from
students
where
num
='''
+
trim(edit1.Text)+'''');
open;
end;
end
else
begin
sql
:=
'select
*
from
students
where
';
if
trim(edit2.Text)
<>
''
then
sql
:=
sql
+
'ty
=
'
+
Ansiquotedstr(edit2.Text,
#39);
if
trim(edit3.Text)
<>
''
then
begin
if
trim(edit2.Text)
=
''
then
sql
:=
sql
+
'nation='
+
Ansiquotedstr(edit3.Text,
#39)
else
sql
:=
sql
+
'and
nation=
'+
Ansiquotedstr(edit3.Text,
#39);
end;
if
trim(edit4.Text)
<>
''
then
begin
if
(trim(edit2.Text)
=
'')
and
(trim(edit3.Text)
='')
then
sql
:=
sql
+
'mianmao
=
'
+
Ansiquotedstr(edit4.Text,
#39)
else
if
(trim(edit2.Text)
<>
'')
or
(trim(edit3.Text)
<>
'')
then
sql
:=
sql
+
'and
mianmao
=
'
+
Ansiquotedstr(edit4.Text,
#39);
end;
if
radiobutton1.Checked
then
begin
v_sex
:=
radiobutton1.Caption;
if
(trim(edit2.Text)
=
'')
and
(trim(edit3.Text)
='')
and
(trim(edit4.Text)
=
'')
then
sql
:=
sql
+
'sex
='
+
Ansiquotedstr(radiobutton1.Caption,
#39)
else
if
(trim(edit2.Text)
<>
'')
or
(trim(edit3.Text)
<>
'')
or
(trim(edit4.Text)
<>
'')
then
sql
:=
sql
+
'and
sex
='
+
Ansiquotedstr(radiobutton1.Caption,
#39);
end;
if
radiobutton2.Checked
then
begin
v_sex
:=
radiobutton2.Caption;
if
(trim(edit2.Text)
=
'')
and
(trim(edit3.Text)
='')
and
(trim(edit4.Text)
=
'')
then
sql
:=
sql
+
'sex
='
+
Ansiquotedstr(radiobutton2.Caption,
#39)
else
if
(trim(edit2.Text)
<>
'')
or
(trim(edit3.Text)
<>
'')
or
(trim(edit4.Text)
<>
'')
then
sql
:=
sql
+
'and
sex
='
+
Ansiquotedstr(radiobutton2.Caption,
#39);
end;
if
(trim(edit2.Text)
=
'')
and
(trim(edit3.Text)
=
''
)
and
(trim(edit4.Text)
=
'')
and
(v_sex
=
'')
then//如果edit控制項全為空,就顯示所有記錄,這里可以自己設置.
sql
:=
'select
*
from
students';
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Append(sql);
adoquery1.Open;
end;
這里我沒有實現日期查詢,因為還不知道..(很少使用ACCESS,慚愧..)

㈤ SQL查詢兩個工作表不同的數據項,不匯總,計算存貨周轉率

將多個表中的數據匯總最常用的辦法是使用union all,具體的要視表結構、「相同屬性」的具體定義、匯總方式等因素而定,可能還要用到連接、篩選、子查詢、分組等手段,當然聚合函數sum是少不了的。

下面例子實現將t1,t2,t3中的各個產品匯總起來,顯示每種產品的總量:

select t.proct ,sum(t.qty) from
(select proct,qty from t1
union all
select proct,qty from t2
union all
select proct,qty from t3) t
group by t.proct;

㈥ excel SQL多表查詢問題

select 日期,存貨名稱,單價,金額 from [2010$] where 存貨名稱 like '%電機%'
union
select 日期,存貨名稱,單價,金額 from [2011$] where 存貨名稱 like '%電機%'
union
select 日期,存貨名稱,單價,金額 from [2012$] where 存貨名稱 like '%電機%'
union
select 日期,存貨名稱,單價,金額 from [2013$] where 存貨名稱 like '%電機%'

㈦ 如何用SQL語句查詢Excel數據

在通過ADO對Excel對象進行連接時(此時Excel則認為是一個數據源),需要配置對Excel數據源對應的連接串,這個連接串中包括了Provider信息(其實類似對資料庫進行連接操作時,都需要指定連接字元串),以下是一行連接串源代碼: strConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strExcelFilePath & ";Extended Properties=Excel 12.0" 這里的Provider使用了Microsoft.ACE.OLEDB.12.0,其實除了Microsoft.ACE.OLEDB.12.0,還有Microsoft.Jet.OLEDB.4.0,它們倆者之間有什麼聯系和區別呢: 共同點:都是做為連接Excel對象的介面引擎 不同點: 對於不同的Excel版本,有兩種介面可供選擇:Microsoft.Jet.OLEDB.4.0(以下簡稱 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下簡稱 ACE 引擎)。 Jet 引擎,可以訪問 Office 97-2003,但不能訪問 Office 2007。 ACE 引擎是隨 Office 2007 一起發布的資料庫連接組件,既可以訪問 Office 2007,也可以訪問 Office 97-2003。 另外:Microsoft.ACE.OLEDB.12.0 可以訪問正在打開的 Excel 文件,而 Microsoft.Jet.OLEDB.4.0 是不可以的。 所以,在使用不同版本的office時,要注意使用合適的引擎。 A:下列語句可在SQL SERVER中查詢Excel工作表中的數據。 2007和2003都可用 SELECT * FROM OpenDataSource( 'Microsoft.ACE.OLEDB.12.0','Data Source="D:\test1.xls";User ID=Admin;Password=;Extended properties="Excel 12.0 Xml;HDR=YES;IMEX=1";')...[Sheet1$] 2007和2010版本: SELECT * FROM OpenDataSource( 'Microsoft.ACE.OLEDB.12.0', 'Data Source="c:\book1.xlsx";User ID=Admin;Password=;Extended properties=Excel 12.0')...[Sheet1$] SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=C:\book1.xlsx', 'SELECT * FROM [Sheet1$A1:D100]') SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=C:\book1.xlsx', 'SELECT * FROM [Sheet1$]') 2003版本: SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 8.0')...[Sheet1$] SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=C:\book1.xls', 'SELECT * FROM [Sheet1$]') SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=C:\book1.xls', 'SELECT * FROM [Sheet1$A1:D100]') 而且,還需要用擁有伺服器sysadmin角色許可權的登錄帳號,先執行下列語句打開SQL SERVER的'Ad Hoc Distributed Queries'開關。 exec sp_configure 'show advanced options',1;reconfigure; exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure; 執行查詢後,再用相反順序的語句,關閉'Ad Hoc Distributed Queries'開關。 exec sp_configure 'Ad Hoc Distributed Queries',0; reconfigure;exec sp_configure 'show advanced options',0;reconfigure

㈧ 如何使用SQL語句實現對Excel工作表數據的查詢

--1.開啟遠程查詢支持
execsp_configure'showadvancedoptions',1
reconfigure
execsp_configure'AdHocDistributedQueries',1
reconfigure

--2.鏈接ExcelMicrosoftACE12.0OLEDBProvider讀Excel數據(注意Excel必須事先關閉)
select*from
openrowset('Microsoft.ACE.OLEDB.12.0','Excel12.0;HDR=Yes;DATABASE=C:/Users/nichk/Desktop/data.xls',Sheet1$);

--3.記得用完選項後,關閉這些選項
execsp_configure'AdHocDistributedQueries',0
reconfigure
execsp_configure'showadvancedoptions',0
reconfigure

--4.查看是不是關閉
execsp_configure

記得電腦必須安裝oledb提供程序(可搜索AccessDatabaseEngine.exe在微軟官網下載安裝),不同的版本訪問方式不一樣,如下是各版本的訪問方式:

-->Jet引擎訪問Excel97-2003
select*fromOpenRowSet('Microsoft.Jet.OLEDB.4.0','Excel8.0;HDR=Yes;IMEX=1;Database=D:/97-2003.xls','select*from[Sheet1$]')
select*fromOpenRowSet('Microsoft.Jet.OLEDB.4.0','Excel8.0;HDR=Yes;IMEX=1;Database=D:/97-2003.xls',[Sheet1$])
select*fromOpenDataSource('Microsoft.Jet.OLEDB.4.0','Excel8.0;HDR=Yes;IMEX=1;Database=D:/97-2003.xls')...[Sheet1$]
select*fromOpenDataSource('Microsoft.Jet.OLEDB.4.0','DataSource=D:/97-2003.xls;ExtendedProperties="Excel8.0;HDR=Yes;IMEX=1"')...[Sheet1$]

-->ACE引擎訪問Excel97-2003
select*fromOpenRowSet('Microsoft.ACE.OLEDB.12.0','Excel12.0;HDR=Yes;IMEX=1;Database=D:/97-2003.xls','select*from[Sheet1$]')
select*fromOpenRowSet('Microsoft.ACE.OLEDB.12.0','Excel12.0;HDR=Yes;IMEX=1;Database=D:/97-2003.xls',[Sheet1$])
select*fromOpenDataSource('Microsoft.ACE.OLEDB.12.0','Excel12.0;HDR=Yes;IMEX=1;Database=D:/97-2003.xls')...[Sheet1$]
select*fromOpenDataSource('Microsoft.ACE.OLEDB.12.0','DataSource=D:/97-2003.xls;ExtendedProperties="Excel12.0;HDR=Yes;IMEX=1"')...[Sheet1$]

-->ACE引擎訪問Excel2007
select*fromOpenRowSet('Microsoft.ACE.OLEDB.12.0','Excel12.0;HDR=Yes;IMEX=1;Database=D:/2007.xlsx','select*from[Sheet1$]')
select*fromOpenRowSet('Microsoft.ACE.OLEDB.12.0','Excel12.0;HDR=Yes;IMEX=1;Database=D:/2007.xlsx',[Sheet1$])
select*fromOpenDataSource('Microsoft.ACE.OLEDB.12.0','Excel12.0;HDR=Yes;IMEX=1;Database=D:/2007.xlsx')...[Sheet1$]
select*fromOpenDataSource('Microsoft.ACE.OLEDB.12.0','DataSource=D:/2007.xlsx;ExtendedProperties="Excel12.0;HDR=Yes;IMEX=1"')...[Sheet1$]

㈨ 怎麼合並這兩張Excel表

  1. 將有專業課績點的sheet命名為「專業課績點」,將有總績點的sheet命名為「總績點」

  2. 如果是excel2016及以上版本,將滑鼠定位到「專業課績點」的sheet數據區域,點擊【數據】選項卡,選擇【來自於區域/表格】,建立一個查詢:

    提取碼: 62cr