Excel中的变量SQL查询

时间:2013-10-09 18:55:33

标签: mysql sql sql-server excel

我希望在excel中创建一个查询,以查找行与colummn中的值匹配的位置。选择几个特定的​​列。

所以,我有

形式的数据
668406  
668406-1    
668406-2    
670589  
671259  
671259-1    
671259-2    
671261  
671261-1    

我想要的是构建一个说

的查询
SELECT     JobHeaderID, Job,ProofApproved,SleeveLabel, MasterLabel
FROM         JobHeader
WHERE   JobHeader.Job = '668406'
or  JobHeader.Job = '668406-1'
or  JobHeader.Job = '668406-2'
or  JobHeader.Job = '670589'
or  JobHeader.Job = '671259'
or  JobHeader.Job = '671259-1'
or  JobHeader.Job = '671259-2'
or  JobHeader.Job = '671261'
or  JobHeader.Job = '671261-1'

TableSameple

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

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

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

或类似的东西,并填写我的批准专栏,其当前状态是否已获批准。如果我能够很好地工作,我会将它扩展到两到三列。如何使“已批准”列反映SQL服务器中相邻作业状态的批准状态。

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

2 个答案:

答案 0 :(得分:0)

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

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

OR

SELECT     JobHeaderID, Job,ProofApproved,SleeveLabel, MasterLabel
FROM         JobHeader
WHERE   JobHeader.Job IN ('Value1','Value2','Value3',.....)

答案 1 :(得分:0)

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

  1. 获取要使用的值范围
  2. 将此范围转换为SQL支持的字符串
  3. 在SQL查询中使用此字符串。
  4. 所以,你可以这样做:

    第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。 希望这有帮助