我希望在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'
我可以构建一个查询并选择整个表值记录,或者当我手动告诉它匹配这些作业时,选择一个或两个记录,但我希望它一次请求所有这些,而不是我手动输入每个in。
如果有SQL函数,我可以调用
=SQLQuery(SQLServer,CONCATENATE("SELECT JobHeaderID, Job,ProofApproved,SleeveLabel, MasterLabel FROM JobHeader WHERE JobHeader.Job = '",C3,"'"))`
或类似的东西,并填写我的批准专栏,其当前状态是否已获批准。如果我能够很好地工作,我会将它扩展到两到三列。如何使“已批准”列反映SQL服务器中相邻作业状态的批准状态。
编辑:构建查询没有问题,无论是仅用于on值还是用于整个范围。我只是不知道如何从Cell或宏进行查询,只将一次选择作为SQL数据源导入或使用microsoft查询选择值(甚至所有值)但无法在这些查询中引用当前值,我必须手工将它们键入。如果有人可以帮助我创建一个像我上面所示的SQLSquery函数,那么我就设置了,否则:我不需要构建查询的帮助,除非你可以帮助我从上面列出的一种类型的源中引用一个更改对象。
答案 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步:
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。 希望这有帮助