SQL根据对另一列的位置引用选择列

时间:2018-08-14 16:20:48

标签: sql excel select

我有一个Excel文档,其中某些列未命名。 excel的组织方式是每个类别都有一个DateTime和一个值,但是只有DateTime列具有标题(这是类别的名称,而不是“日期”)

例如

|Category 1|     | |Category 2|      |
|May 1     |13246| |May 4     |84563 |
|May 3     |65842| |May 7     |84535 |
|May 8     |86453| |May 8     |876541|

等,用于文档的其余部分。有没有办法将两个列与SQL关联在一起?可能类似

 Select Category1, [Category1 + 1]
 from Table

谢谢

1 个答案:

答案 0 :(得分:1)

我已经探讨了这个问题。我认为最简单的解决方案是仅添加标题。

但是VBA中的解决方法。创建连接时,我们将HDR设置为no。这将自动为我们生成标题,从F1到Fn。不幸的是,我们现在将有一行读取类别1,空,类别2,空。我们无法运行删除查询,因为它们不受支持。我尝试将整个行设置为null,但遇到了问题。

Sub main()
Dim cn                      As ADODB.Connection
Dim rs                      As ADODB.Recordset
Dim strFile                 As String
Dim strCon                  As String
Dim strSql                  As String

    cn.Open _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source='" & ThisWorkbook.FullName & "';" & _
        "Extended Properties=""Excel 12.0 Macro;HDR=NO;IMEX=1;"";"

    Set cn = New ADODB.Connection

    cn.Open strCon

    strSql = "SELECT * From [DataTable]"

    Set rs = New ADODB.Recordset

    rs.Open strSql, cn

    Debug.Print rs.GetString

    rs.Close

    strSql = "SELECT CDATE([F1]),CDATE([F3]),[F4] FROM [DATATABLE] WHERE [F2] = 13246 ORDER BY [F1];"

    rs.Open strSql, cn

    Debug.Print rs.GetString

    Set cn = Nothing
    Set rs = Nothing
End Sub
  

我的输出。首先执行debug.print可以获取整个记录集。然后,我运行一个测试查询,并确保它看起来还可以。

category 1      category 2  
43221   13246   43224   84563
43223   65842   43227   84535
43228   86453   43228   876541

5/1/2018    5/4/2018    84563