将SQL查询转换为VBA
我已经在Oracle中成功运行了SQL查询,代码是-将SQL查询转换为VBA,sql,vba,excel,Sql,Vba,Excel,我已经在Oracle中成功运行了SQL查询,代码是- Select Sam.SAM_ID, sum( case when Aud.AUDIT_COMPLETION between (next_day(trunc(sysdate, 'iw'), 'Friday') - 14) and (next_day(trunc(sysdate, 'iw'), 'Friday') - 7) then 1 else 0 end ) as "Major Defects - 1 week", sum( case
Select Sam.SAM_ID, sum( case when Aud.AUDIT_COMPLETION between (next_day(trunc(sysdate, 'iw'), 'Friday') - 14) and
(next_day(trunc(sysdate, 'iw'), 'Friday') - 7) then 1 else 0 end ) as "Major Defects - 1 week",
sum( case when Aud.AUDIT_COMPLETION between (next_day(trunc(sysdate, 'iw'), 'Friday') - 28) and (next_day(trunc(sysdate, 'iw'), 'Friday') - 7) then 1 else 0 end ) as "Major Defect - 4 week", count(Aud.AUDIT_COMPLETION)
From CMS.CMS_SAM_ALL_DATA Sam left join CMS.WATSON_AUDIT_INSPECTION_DT1_VW Aud ON Sam.SAM_ID = Aud.SAM_ID
Where Aud.DEFECT_SEVERITY = 'Major' AND
Aud.AUD_RESULT = 'Defect' And
NOT (Aud.AUDIT_OUTCOME = 'SPFR Withdrawn' and
Aud.AUDIT_OUTCOME = 'Defect/ Observation Cancelled' and
Aud.AUDIT_OUTCOME = 'Rejected by MIMA' and
Aud.AUD_RESULT = 'Fixed' and
Aud.AUDIT_OUTCOME = 'SPFR response accepted') and
Aud.AUDIT_COMPLETION IS NOT NULL
Group by Sam.SAM_ID;
现在我尝试在宏(VBA)中运行上述代码,但无法成功运行宏,宏代码-
StrSQL = StrSQL & "Select Sam.SAM_ID,"
StrSQL = StrSQL & "sum(case when Aud.AUDIT_COMPLETION between (next_day(trunc(sysdate, 'iw'), 'Friday') - 14) and (next_day(trunc(sysdate, 'iw'), 'Friday') - 7) then 1 else 0 end )as ""Major Defects - 1 week"","
StrSQL = StrSQL & "sum(case when Aud.AUDIT_COMPLETION between (next_day(trunc(sysdate, 'iw'), 'Friday') - 28) and (next_day(trunc(sysdate, 'iw'), 'Friday') - 7) then 1 else 0 end )as ""Major Defect - 4 week"","
StrSQL = StrSQL & "count(Aud.AUDIT_COMPLETION)as ""Total Open Defects""
StrSQL = StrSQL & "From CMS.CMS_SAM_ALL_DATA Sam left join CMS.WATSON_AUDIT_INSPECTION_DT1_VW Aud ON Sam.SAM_ID = Aud.SAM_ID"
StrSQL = StrSQL & "Where Aud.DEFECT_SEVERITY = 'Major' AND Aud.AUD_RESULT = 'Defect' And NOT (Aud.AUDIT_OUTCOME = 'SPFR Withdrawn' and Aud.AUDIT_OUTCOME = 'Defect/ Observation Cancelled' and Aud.AUDIT_OUTCOME = 'Rejected by MIMA' and Aud.AUD_RESULT = 'Fixed' and Aud.AUDIT_OUTCOME = 'SPFR response accepted') and Aud.AUDIT_COMPLETION IS NOT NULL, Aud.AUDIT_COMPLETION IS NOT NULL, "
StrSQL = StrSQL & "Group by Sam.SAM_ID;"
当我运行上面的代码时,我得到一个错误-
未在预期位置找到FROM关键字
使用换行符(_)并将引号加倍以转义:
strSQL = "select a, b as ""My Field"" from " & _
"tableZ where a = 'blah' and " & _
"b ='blah' "
使用换行符(_)并将引号加倍以转义:
strSQL = "select a, b as ""My Field"" from " & _
"tableZ where a = 'blah' and " & _
"b ='blah' "
您没有CMS.CMS\u SAM\u所有数据SAM留下的
count(Aud.AUDIT\u COMPLETION)之间的空间
但是采纳蒂姆·威利亚姆的建议,把它分成新的系列。您也可以这样做:
Dim strSQL As String
strSQL = strSQL & "SELECT "
strSQL = strSQL & "1 "
strSQL = strSQL & "FROM dual "
您没有CMS.CMS\u SAM\u所有数据SAM留下的count(Aud.AUDIT\u COMPLETION)之间的空间
但是采纳蒂姆·威利亚姆的建议,把它分成新的系列。您也可以这样做:
Dim strSQL As String
strSQL = strSQL & "SELECT "
strSQL = strSQL & "1 "
strSQL = strSQL & "FROM dual "
除了生成包含SQL的字符串之外,不需要任何翻译。不清楚您的代码示例显示了什么。“无法成功运行宏”并不是对运行VBA时发生的情况的真正有用的描述。您有错误吗?我如何用VBABE编写相同的整个SQL查询,并将其括在引号中。或者按原样将其粘贴到工作表单元格中,并让代码从此处读取它。我现在更新了有错误的问题。请参阅我发布的链接,了解如何格式化字符串以使其更具可读性。除了生成包含SQL的字符串外,无需翻译。不清楚您的代码示例显示了什么。“无法成功运行宏”并不是对运行VBA时发生的情况的真正有用的描述。您有错误吗?我如何用VBABE编写相同的整个SQL查询,并将其括在引号中。或者按原样将其粘贴到工作表单元格中,并让代码从此处读取它。我现在更新了有错误的问题。请参阅我发布的链接,了解如何格式化字符串以使其更具可读性。这将产生SELECT1FROM dual
注意空格!这将产生SELECT1FROM dual
注意您的空间!我尝试了与上面提到的相同的格式,仍然得到一个错误“FROM关键字未在预期的位置找到”。使用您尝试的准确VBA更新您的问题将非常有用。我现在已更新。还有一件事,当我尝试在每一行之后使用&u时,它会抛出一个错误作为“无效字符”。使用&u是不好的,因为这种类型的行连接有连接的限制…@Gadziu-就像编程中的许多其他东西一样,“好”不是绝对的。如果有太多行要使用&
,请不要使用它,但如果有那么多行,可能最好将SQL存储在一个工作表单元格中,这样更易于维护。我尝试了与上述相同的格式,仍然得到一个错误,即“FROM关键字未在预期位置找到”。用您尝试过的VBA更新您的问题会很有用。我现在已经更新了。还有一件事,当我尝试在每一行之后使用&u时,它会抛出一个错误作为“无效字符”。使用&u是不好的,因为这种类型的行连接有连接的限制…@Gadziu-就像编程中的许多其他东西一样,“好”不是绝对的。如果有太多的行要使用&
,那么不要使用它,但是如果有那么多行,那么最好将SQL存储在工作表单元格中,这样更易于维护。