我有一个关于Excel / SQL的相当简单的问题让我疯狂......
我在Excel中有一个简单的表,位于Sheet“DataBase”/ Range A1:C2500(根据行号动态设置):
A | B | C
ID | Date | Price
--------------------------
1 | 01/01/20xx | 11
2 | 01/01/20xx | 12
3 | 01/01/20xx | 13
4 | 01/01/20xx | 14
5 | 01/01/20xx | 15
...
1500 | 01/01/20xx | 11500
在另一张名为“报告”的工作表中,我有一份报告需要以非常具体的ID顺序显示价格,该顺序在左栏(“A”)中指定(偶尔会有空行/空行)。 / p>
A | B
ID | Price
------------
10 |
15 |
300 |
23 |
20 |
...
我已经通过使用以下带有ADODB连接的SQL字符串成功填充了“B”列(我知道这可以非常使用其他方法轻松完成但我正在实现SQL,因为我假装以后查询Access表,而不是Excel本身):
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=" & ThisWorkbook.FullName & "" _
& ";Extended Properties=""Excel 12.0;HDR=Yes;"""
.Open
End With
sql_string=
"SELECT [DataBase$A1:C2500].Price
FROM [Report$A1:A30] LEFT JOIN [DataBase$A1:C2500] ON [Report$A1:A30].ID =[DataBase$A1:C2500].ID
WHERE ((([DataBase$A1:C2500].Data)=#01/01/20xx# OR ([DataBase$A1:C2500].Data) is null);"
Set rs = cn.Execute(sql_string)
Sheets("Report").Range("B2").CopyFromRecordset rs
rs.close
当我在Report.Column(A)中最多有~700行/ ID并且所有价格都在正确/预期的行中时,它工作正常。
如果我有1000行或更多行/ ID,则查询会将所有“空白”值分组到表格顶部,其余数据位于空白行下方...
所以,对我的问题: 1)为什么会这样?是否容易纠正或 2)是否有更好的方法以非常特定的顺序从excel / access中提取数据,并使用SQL在中间使用随机空行?
答案 0 :(得分:0)
好吧,经过一番挖掘......我已经找到了解决方案。不知道它是否是最有效的(我注意到与之前相比有些滞后),但它确实有效。
它的工作原理是创建一个名为“TempTable”的表,其中ID和Price数据按日期过滤。然后,它按照我需要的顺序与包含ID的表连接,并根据需要添加尽可能多的空白行。
这是:
SELECT TempTable.Price
FROM [Report$A1:A30]
LEFT JOIN
(SELECT [DataBase$A1:C2500].ID, [DataBase$A1:C2500].Price
FROM [DataBase$A1:C2500]
WHERE (([DataBase$A1:C2500].Data)=#01/01/20xx#))
AS TempTable
ON [Report$A1:A30].ID=TempTable.ID;
希望如果有人遇到同样的问题会有所帮助!
韩国社交协会!