我试图从另一个表中创建一个子表,该表包含排序为a-Z的所有姓氏字段,其中电话号码字段不为空.我可以用SQL很容易地做到这一点,但我不知道如何在Excel中运行SQL查询.我很想将数据导入postgresql并在那里查询,但这似乎有点过分.

对于我试图做的事情,SQL查询SELECT lastname, firstname, phonenumber WHERE phonenumber IS NOT NULL ORDER BY lastname可以做到这一点.这似乎太简单了,Excel本就无法做到.如何从Excel中运行这样的SQL查询?

推荐答案

有很多好方法可以做到这一点,其他人已经提出了这一点.下面是"通过SQL跟踪获取Excel数据"的一些提示.

  1. Excel有"Data Connection Wizard",允许您从另一个数据源导入或链接,甚至在同一个Excel文件中.

  2. 作为微软Office(和操作系统)的一部分,有两个令人感兴趣的Provider :旧的"Microsoft.Jet.OLEDB"和最新的"Microsoft.ACE.OLEDB".例如,在设置连接时使用向导查找数据.

  3. 一旦连接到Excel工作簿,工作表或区域就相当于表或视图.工作表的表名是工作表的名称,后面附加了一个美元符号($),并用方括号("["和"])包围;对于一个范围,它只是该范围的名称.要指定未命名的单元格区域作为记录源,请在方括号中的工作表名称末尾附加标准Excel行/列符号.

  4. 本机SQL将(或多或少)成为Microsoft Access的SQL.(在过go ,它被称为JET SQL;然而Access SQL已经进化,我相信JET是不受欢迎的旧技术.)

  5. 例如,阅读工作表:SELECT * FROM [Sheet1$]

  6. 例如,读取范围:SELECT * FROM MyRange

  7. 例如,读取未命名的单元格范围:SELECT * FROM [Sheet1$A1:B10]

  8. 有很多书和网站可以帮助你完成这些细节.

进一步说明

默认情况下,假定Excel数据源的第一行包含可以用作字段名的列标题.如果情况并非如此,则必须关闭此设置,否则第一行数据"消失"以用作字段名.这是通过将可选的HDR= setting添加到连接字符串的扩展属性来实现的.默认值为HDR=Yes,无需指定.如果没有列标题,则需要指定HDR=No;提供者将字段命名为F1、F2等.

关于指定工作表的注意事项:提供程序假定您的数据表从指定工作表上最上面、最左边、非空白的单元格开始.换句话说,数据表可以从第3行C列开始,没有问题.但是,例如,您不能在单元格A1中数据的上方和左侧键入工作表标题.

关于指定范围的注意事项:当您指定一个工作表作为记录源时,提供程序会在工作表中现有记录的下方添加新记录,只要空间允许.当您指定一个范围(命名或未命名)时,Jet还会在空间允许的情况下,在该范围内现有记录的下方添加新记录.但是,如果重新查询原始范围,则生成的记录集不包括该范围之外新添加的记录.

数据类型(值得try )为CREATE TABLE: Short, Long, Single, Double, Currency, DateTime, Bit, Byte, GUID, BigBinary, LongBinary, VarBinary, LongText, VarChar, Decimal.

连接到"旧技术"Excel(扩展名为xls的文件):Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyFolder\MyWorkbook.xls;Extended Properties=Excel 8.0;.对于Microsoft Excel 5.0和7.0(95)工作簿,使用Excel 5.0源数据库类型;对于Microsoft Excel 8.0(97)、9.0(2000)和10.0(2002)工作簿,使用Excel 8.0源数据库类型.

连接到"最新"Excel(文件扩展名为xlsx的文件):Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Excel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;"

将数据视为文本:IMEX设置将所有数据视为文本.Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Excel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";

(更多详情见第http://www.connectionstrings.com/excel页)

更多信息,请点击http://msdn.microsoft.com/en-US/library/ms141683(v=sql.90).aspxhttp://support.microsoft.com/kb/316934

通过VBA通过ADODB连接到Excel,详情见http://support.microsoft.com/kb/257819

微软JET 4详情http://support.microsoft.com/kb/275561

Sql相关问答推荐

基于模式或其他行集的数据复制

Trino/Presto sq:仅当空值位于组中第一个非空值之后时,才用值替换空值

使用SQL旋转表的列(Snowflake)

如何连接第二个表并将其内容输入到第一个表的单个字段中?

不可能在SQL MERGE子句中引发异常

在Golang中管理数据库事务的简洁方法

SQL基于多个值 Select 单行

当交叉联接3个或更多表时,实体框架中是否会传输冗余的行数据并占用数据库带宽?

在Oracle中,如何删除具有特定值的行,仅当它是重复的行?

SQL JSON_QUERY 使用列中的值构造 json 路径并接收错误

将具有嵌套 XML 的列转换为 SQL 中的表格格式?

Grafana SQL 模板变量(值、文本)

在presto sql中解析带有区域的时间格式

根据不同日期标准分配组的逻辑

BigQuery导航函数计算ID

多行状态下的分组查询判断状态

使用日期和间隔作为键加入 Athena 上的表?

SQL Select 最大并获取列名

如何在 Oracle 中获取此变量的值?

创建一个将层次 struct 级别放入列中的查询