gpt4 book ai didi

sql - 如何在 Excel 中使用 SQL 连接

转载 作者:行者123 更新时间:2023-12-03 02:55:53 26 4
gpt4 key购买 nike

我看到大约一年前更新的一个问题,它让我在找到所需的解决方案方面走了很长一段路,但导致的问题多于答案。

首先我要说的是,我不是 SQL(DB2、SQLServer、Oracle)的“新手”,但对于在 Excel 中使用 SQL 来说,我是一个相对“新手”。另外,我在 2010 年工作,但必须保持与 2003 年的兼容性。

我想做的是将一张纸中的数据与另一张纸中的数据进行匹配并报告异常。我想从“未结订单”中选取 6 列,并将它们与“延期交货订单”中的 3 列相匹配,并且仅显示异常(exception)情况。 “未结订单”可以是 1..n,“延期交货订单”可以是 0..n。我只想抓取存在“延期交货订单”的行。

要编写普通的 SQL,我会这样做:

SELECT 
O.[Part Number], O.[Part Desc], O.[Source Domain], O.[Ship Qty], O.[Date Created],
B.[Dest Domain], B.[Quantity], B.[Date Created]
FROM [OPEN LINES] O
JOIN [Back Orders] B ON O.[Part Number] = B.[Part Number]
WHERE B.[Part Number] IS NOT NULL
ORDER BY O.[Part Number]

问题是我无法在没有错误的情况下通过连接。这就是我到目前为止所拥有的。

rs.Open "SELECT [OPEN LINES$].[Part Number], [OPEN LINES$].[Part Desc], " $ _
"[OPEN LINES$]. [Source Domain], " & _
"[OPEN LINES$].[Ship Qty], [OPEN LINES$].[Date Created] " & _
"FROM [OPEN LINES$] " & _
"JOIN [Back Orders$] ON [OPEN LINES$].[Part Number] = [Back Orders$].[Part Number] " & _
"ORDER BY [OPEN LINES$].[Part Number] ;", cn

如果您能提供任何帮助,我将不胜感激。

戈德

最佳答案

试试这个:

rs.Open "SELECT [OPEN LINES$].[Part Number], [OPEN LINES$].[Part Desc], " $ _
" [OPEN LINES$]. [Source Domain], " & _
" [OPEN LINES$].[Ship Qty], [OPEN LINES$].[Date Created] " & _
" FROM [OPEN LINES$], [Back Orders$] " & _
" WHERE [OPEN LINES$].[Part Number] = [Back Orders$].[Part Number] " & _
" ORDER BY [OPEN LINES$].[Part Number]", cn

您不需要结尾分号。

这是一个更简单的示例(在 XL2010 中测试)

Sub SqlJoin()

Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset
Dim sPath
Dim sSQL As String

sSQL = "select a.blah from <t1> a, <t2> b where a.blah = b.blah"

sSQL = Replace(sSQL, "<t1>", Rangename(Sheet1.Range("A1:A5")))
sSQL = Replace(sSQL, "<t2>", Rangename(Sheet1.Range("C1:C3")))

If ActiveWorkbook.Path <> "" Then
sPath = ActiveWorkbook.FullName
Else
MsgBox "Workbook being queried must be saved first..."
Exit Sub
End If

oConn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & sPath & "';" & _
"Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';"

oRS.Open sSQL, oConn

If Not oRS.EOF Then
Sheet1.Range("E1").CopyFromRecordset oRS
Else
MsgBox "No records found"
End If

oRS.Close
oConn.Close

End Sub

Function Rangename(r As Range) As String
Rangename = "[" & r.Parent.Name & "$" & _
r.Address(False, False) & "]"
End Function

关于sql - 如何在 Excel 中使用 SQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15304563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com