我正在尝试执行以下SQL语句(在SQL Server 2005中构建和测试)
Select *
From mytesttable
where myPk in
(
select t3 from (
select field1, substring(field3, charindex(":", field3),6) t2, min(mypk) t3
from mytesttable
group by field2, substring(field3, charindex(":", field3),6)
) t
)
我知道我不能使用substring或charindex。所以最里面的选择在vbs中看起来像这样:
strsql = "select mid(field3, instr(1, field3, ":")), min(mypk) from "
strsql = strsql & myCSVFileName
strsql = strsql & myCSVFileName & " GROUP By mid(field3, instr(1, field3, ":")) "
这很好。
但是当我尝试添加下一个select以包装最内部的select时,它会失败。代码如下所示:
strsql = "select mypk from ( select mid(field3, instr(1, field3, ":")), min(mypk) from "
strsql = strsql & myCSVFileName
strsql = strsql & myCSVFileName & " GROUP By mid(field3, instr(1, field3, ":")) )"
我得到的错误信息是
没有给出一个或多个必需参数的值
有什么建议吗? 谢谢。
答案 0 :(得分:1)
我不知道Jet,但在SQL Server和其他平台中,派生表必须是别名。换句话说,你需要
... FROM (select ... ) AS YouMustProvideAnAliasForThisDerivedTable
每次提到一个专栏(mypk vs. myPk)时也要小心使用相同的外壳,尽管这似乎不是问题所在。
答案 1 :(得分:0)
您的字符串中存在一些错误,但在Jet中不需要为派生表提供别名。
您已使用csv名称重复该行,如果应使用单引号或两个双引号,则使用双引号,并且您没有要返回的名为mypk的字段。这适用于我,但仅当字段3始终包含带冒号的文本时。
myCSVFileName = "Table.csv"
strsql = "select pk from ( select mid(field3, instr(1, field3, ':')), min(mypk) as pk from "
strsql = strsql & myCSVFileName & " GROUP By mid(field3, instr(1, field3, ':')) )"