使用SQL查询表以非常特定的顺序显示数据

时间:2018-04-05 18:02:45

标签: sql excel adodb

我有一个关于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在中间使用随机空行?

1 个答案:

答案 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;

希望如果有人遇到同样的问题会有所帮助!

韩国社交协会!