将WHERE子句导出为多个值的excel的最有效方法

时间:2015-05-08 00:27:28

标签: sql sql-server excel

所以我可以说我有这个查询,例如

SELECT    *
FROM dbo.test
WHERE (person_ID IN ('person1', 'person2', 'person3', 'person4', 
       'person5', 'person6', 'person7', 'person8', 'person9', 
       'person10', 'person11', 'person12', 'person13', 
       'person14', 'person15', 'person16', 'person17', 
       'person18', 'person19', 'person20'))

它为我提供了测试表中这些值的所有结果。我需要将每个人的结果保存到自己的excel文件中,或者保存到excel中的自己的选项卡中。而不是一起写一个查询。

基本上我将如何正确地编写此查询,以便为每个人提供单独的输出,我可以快速复制并粘贴到自己的Excel工作表中?

对我来说困难的部分是我现在可以说excel表中有近200个以上的值我将要搜索(例如使用上面的查询person1到200)这一切都在一列中所以我只是格式化了使用'@'的所有值,所以它将作为示例'person1'出现,我只是复制并粘贴到whereIN(Clause。如果我想单独执行它是最好的方法,这样它会给我很多不同的结果都可以分解,我可以使用select all复制和粘贴,因为每个person_id都可以返回很多结果。

最后是复制和粘贴最简单的方法吗?让他们进入他们自己的excel文件还是有更简单的方法?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

这是您可以尝试的示例。这对每个人来说都不是最简单的方式,但这是我觉得相对容易的一种方式。

我在这个便利样本中使用了MS Access 2013而不是SQL Server 2014或其他真实的现代RDBMS。您应该能够采用这个例子并根据您的需求进行调整

我创建了一个MS Access文件c:\ test \ Database1.accdb。它包含一个名为Table1的表,其中包含以下字段:

  • ID
  • 姓氏
  • 年龄

数据如下所示:

ID  Firstname  Lastname  Age
--- ---------- --------- ----
1   John       Smith     12
2   Matt       Johnson   21

然后,我创建了Excel工作表并将其保存为启用宏的Excel文件(Database1.xlsm)。

此后'事件的顺序:

  • 姓名第一张1
  • 如果还有其他工作表,请将其删除
  • 转到数据>来自其他来源>来自Microsoft Query> MS Access数据库>导航到c:\ test并选择Database1.accdb
  • 选择表1并使用>箭头标志添加所有字段>下一个。再来一次。接下来再次
  • 在Microsoft Query中选择查看数据或编辑查询。单击“完成”
  • 单击SQL按钮
  • 确保SQL看起来像这样(必要时编辑SQL)

    SELECT Table1.ID,Table1.Firstname,Table1.Lastname,Table1.Age 来自C:\test\Database1.accdb。表1表1 ID =?

  • 单击“确定”。系统将提示您输入标题为“输入参数值”的对话框。键入1并单击“确定”

  • X out(即关闭)Microsoft Query
  • 将显示
  • 导入数据对话框,其中已选择现有工作表单选按钮并输入=$A$1。将其更改为=$A$3
  • 右键单击列A3>表>参数
  • 在“参数”对话框中,选择单选按钮从以下单元格中获取值,然后在该文本框中键入=A1
  • 转到文件>选项>自定义功能区>选中右侧的“开发人员”复选框,然后单击“确定”(See instructions if needed
  • 转到开发者> Visual Basic
  • 点击右上角的VBAProject(Database1.xlsm)
  • 从顶部的应用程序菜单中,点击插入>模块。将使用Module1创建模块文件夹
  • 在其中写下以下内容

    Sub Macro1()

    Dim StartNumber As Integer
    Dim EndNumber As Integer
    StartNumber = 2
    EndNumber = 10
    
    ' remove all sheets except the first sheet,
    ' assuming first sheet is called 1
    Dim ws As Worksheet
    Application.DisplayAlerts = False
    For Each ws In ActiveWorkbook.Sheets
        If Not ws.Name = "1" Then
            Sheets("1").Select
            ws.Delete
        End If
    Next
    Application.DisplayAlerts = True
    
    ' make a copy of sheet1 that we prepared carefully
    Dim i As Integer
    For i = StartNumber To EndNumber
        Sheets("1").Select
        Sheets("1").Copy After:=Sheets(i - 1)
        Sheets(i).Select
        Sheets(i).Name = i
    Next
    
    ' update cell A1 of each sheet
    For Each ws In ActiveWorkbook.Sheets
        ws.Cells(1, 1) = ws.Name
    Next
    
    ' refresh query in all sheets
    ActiveWorkbook.RefreshAll
    

    End Sub

  • 保存文件。关闭Microsoft Visual Basic for Applications窗口

  • 转到开发人员工具栏>宏>点击Macro1>选项>在文本框中键入Shift + t(大写字母T)以使用CTRL + SHIFT + t组合调用Macro1
  • 按该组合

您现在应该看到10张名为1到10的纸张。每张纸张的单元格A1将包含纸张的名称。表格也会自动刷新。

如果再次运行,名为1的工作表将不受影响。所有其他工作表将被擦除并重新创建。

试一试。成功后,删除除1以外的所有工作表。将连接切换到SQL Server并测试工作表1.运行良好后,只需按CTRL + SHIFT + T,您将有多张工作表,其中包含您要查找的数据。