-1

我正在寻找在 excel 中创建一个查询,以查找行与列中的值匹配的位置。选择一些特定的列。

所以,我有表格中的数据

668406  
668406-1    
668406-2    
670589  
671259  
671259-1    
671259-2    
671261  
671261-1    

我想要的是建立一个查询,说

选择 JobHeaderID、Job、ProofApproved、SleeveLabel、MasterLabel
来自 JobHeader
在哪里 JobHeader.Job = '668406'
或 JobHeader.Job = '668406-1'
或 JobHeader.Job = '668406-2'
或 JobHeader.Job = '670589'
或 JobHeader.Job = '671259'
或 JobHeader.Job = '671259-1'
或 JobHeader.Job = '671259-2'
或 JobHeader.Job = '671261'
或 JobHeader.Job = '671261-1'

表样例

我可以构建一个查询并选择整个表的记录,或者当我手动告诉它匹配这些工作时选择一到两条记录,但我希望它一次请求所有这些,而不是我手动输入每一个。

如果有一个 SQL 函数,我可以调用

=SQLQuery(SQLServer,CONCATENATE("SELECT JobHeaderID, Job,ProofApproved,SleeveLabel, MasterLabel
来自 JobHeader
WHERE JobHeader.Job = '",C3,"'"))`

或类似的东西,并在我的已批准列中填写它们是否已获得批准的当前状态。如果我让它运作良好,我也会将它扩展到两到三列。如何使“已批准”列反映 SQL 服务器中相邻作业状态的批准状态。

编辑:我构建查询没有问题,无论是只针对价值还是一次针对整个范围。我只是不知道如何从单元格或宏中进行查询,只导入一次选择作为 SQL 数据源或使用 microsoft 查询来选择值(甚至是所有值),但无法在这些查询中引用当前值,我必须手动键入它们。如果有人可以帮助我像上面显示的那样创建一个 SQLSquery 函数,那么我已经设置好了,否则:我不需要帮助构建查询,除非你可以帮助我从我上面列出的一种类型的源中引用一个不断变化的对象.

4

2 回答 2

0

在 sql server 中,您可以执行类似的操作

SELECT     JobHeaderID, Job,ProofApproved,SleeveLabel, MasterLabel
FROM         JobHeader
WHERE   JobHeader.Job IN (SELECT ColumnName FROM TableName WHERE Your_Condition)

或者

SELECT     JobHeaderID, Job,ProofApproved,SleeveLabel, MasterLabel
FROM         JobHeader
WHERE   JobHeader.Job IN ('Value1','Value2','Value3',.....)
于 2013-10-09T19:03:20.283 回答
0

您可以通过几个步骤解决此问题:

  1. 获取要使用的值的范围
  2. 将此范围转换为 SQL 支持的字符串
  3. 在 SQL 查询中使用此字符串。

因此,您可以通过以下方式执行此操作:

第 1 步和第 2 步:

For Each currentCell in Range("C2:C100")

  -- First, check if the last cell has been reached. 
  --If so, don't add the trailing comma
  If (currentCell <> Range("C100") then
    inQueryString = inQueryString & "'" & currentCell.value & "'"
  Else
    inQueryString = inQueryString & "'" & currentCell.value & "',"
  End If
Next

然后, inQueryString 将包含您可以直接在 SQL 查询中使用的值列表。

=SQLQuery(SQLServer,CONCATENATE(
"SELECT JobHeaderID, Job,ProofApproved,SleeveLabel, MasterLabel
FROM         JobHeader
WHERE   JobHeader.Job IN (",inQueryString,")"))

假设您的范围是 C2:C100,最后一个单元格是 C100。希望这可以帮助

于 2013-10-09T20:02:19.093 回答