在Excel中多次执行SQL查询并根据行更改变量

时间:2015-09-18 13:51:25

标签: mysql sql excel excel-formula

基本上我有一张 Excel 表,其中包含大约5k +社交安全号码的列表,我想将他们的电子邮件地址添加到 Excel 表中。

是否可以设置电子表格来运行简单的SQL查询,如:

SELECT emailaddress
FROM table
WHERE ssn = '?'

除非它根据查询所在的行自动更改变量,并且让它自动在电子表格中运行,只是查询相应的ssn?

谢谢!

---------------------------------------- EDIT ------ -------------------------------------------

我想如果它有助于澄清,这是我的Excel工作表的基本示例:

        A          B             C             D            E
 1  |  Name |   Address   | Phone Number |  Social     |          |
 2  | Brian | 123 Abc ST. | 555-1234     | 111-22-3333 |          |
 3  | John  | 88 N. Road  | 444-4848     | 123-45-4568 |          |

Etc...

我们的数据库有这个,还有更多字段,所以我想要包含他们的电子邮件,然后将其添加到表格中。

        A          B             C             D                 E
 1  |  Name |   Address   | Phone Number |  Social     |       Email      |
 2  | Brian | 123 Abc ST. | 555-1234     | 111-22-3333 | brian@gmail.com  |
 3  | John  | 88 N. Road  | 444-4848     | 123-45-4568 | john@hotmail.com |

                                                         ^Add this column^

基本上只是在电子邮件列中放入相同的查询,并让它引用它的相应SSN单元格。所以相同的查询将进入Brian和John的电子邮件单元格,但变量将自动选择同一行中的社交。

Query:
SELECT emailaddress
FROM table             <-------------Use this query in this column--|
WHERE ssn = '?'                      But have the variable change   |
                                     depending on the row it is in  V

        A          B             C             D                 E
 1  |  Name |   Address   | Phone Number |  Social     |         Email        |
 2  | Brian | 123 Abc ST. | 555-1234     | 111-22-3333 | "...where ssn = (D2)"|
 3  | John  | 88 N. Road  | 444-4848     | 123-45-4568 | "...where ssn = (D3)"|

                                                            ^Query Example^

希望澄清事情。

2 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是将所有SSN加载到SQL,然后将其添加回Excel,并添加emailaddress字段。

创建一个表来存储数据库中的数据:

CREATE TABLE ssn (ssn CHAR(9));

现在在Excel中,使用此公式生成INSERT语句以加载SSN。这假定数据在A列中,并从第2行开始。这里棘手的部分是确保正确地获得双引号和单引号!

=CONCATENATE("INSERT ssn VALUES ('",A2,"');")

将该公式填入数据底部,然后复制/粘贴到SQL。您现在可以将所有SSN加入到表中,包括如下所示的电子邮件地址:

SELECT s.ssn, t.emailaddress
    FROM ssn s
    INNER JOIN table t ON s.ssn = t.ssn

我在我的博客“快速联系语句”https://www.rustprooflabs.com/2015/08/sql-for-ir

下的帖子底部有一个更详细的例子。

答案 1 :(得分:0)

我认为你能做的最好的事情就是用你的只读数据库构建多个查询:

select [your_desired_fields]
  from table
 where SSN in (ssn-1, ssn-2, ... ssn-N);

与MySQL的IN子句接受的逗号分隔参数一样多(例如,Oracle将其限制为1,000)。然后手动或使用UNION查询将结果拼凑在一起。

我使用的是甲骨文,但我认为如果你想加入它们,你可以这样做:

select [your_desired_fields]
  from table
 where SSN in (ssn-1, ssn-2, ... ssn-1000)
UNION
select [your_desired_fields]
  from table
 where SSN in (ssn-1001, ssn-2, ... ssn-2000)
UNION
   etc, etc.

这里的Range2Csv() VBA函数可以帮助构造该查询: http://dullsharpness.com/2011/11/14/excel-vba-range-to-csv-range2csv-function/