所以我可以说我有这个查询,例如
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文件还是有更简单的方法?
答案 0 :(得分:0)
对于这样的事情我会建议SSRS。以下示例显示了如何使用Reporting Services to export an Excel file with Multiple Worksheets in SQL Server 2008 R2 using SSRS Report Designer in Visual Studio 2010。
答案 1 :(得分:0)
这是您可以尝试的示例。这对每个人来说都不是最简单的方式,但这是我觉得相对容易的一种方式。
我在这个便利样本中使用了MS Access 2013而不是SQL Server 2014或其他真实的现代RDBMS。您应该能够采用这个例子并根据您的需求进行调整
我创建了一个MS Access文件c:\ test \ Database1.accdb。它包含一个名为Table1的表,其中包含以下字段:
数据如下所示:
ID Firstname Lastname Age
--- ---------- --------- ----
1 John Smith 12
2 Matt Johnson 21
然后,我创建了Excel工作表并将其保存为启用宏的Excel文件(Database1.xlsm)。
此后'事件的顺序:
确保SQL看起来像这样(必要时编辑SQL)
SELECT Table1.ID,Table1.Firstname,Table1.Lastname,Table1.Age
来自C:\test\Database1.accdb
。表1表1
ID =?
单击“确定”。系统将提示您输入标题为“输入参数值”的对话框。键入1并单击“确定”
=$A$1
。将其更改为=$A$3
=A1
在其中写下以下内容
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窗口
您现在应该看到10张名为1到10的纸张。每张纸张的单元格A1将包含纸张的名称。表格也会自动刷新。
如果再次运行,名为1的工作表将不受影响。所有其他工作表将被擦除并重新创建。
试一试。成功后,删除除1以外的所有工作表。将连接切换到SQL Server并测试工作表1.运行良好后,只需按CTRL + SHIFT + T,您将有多张工作表,其中包含您要查找的数据。