0

次の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
  ) 

私は部分文字列またはcharindexを使用できないことを知っています。したがって、vbsでは最も内側のselectは次のようになります。

strsql = "select mid(field3, instr(1, field3, ":")), min(mypk) from "
strsql = strsql & myCSVFileName 
strsql = strsql & myCSVFileName & " GROUP By mid(field3, instr(1, field3, ":")) "

これは正常に実行されます。

しかし、次の選択を追加して最も内側の選択をラップしようとすると、失敗します。コードは次のようになります。

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, ":")) )"

私が受け取るエラーメッセージは、

1つ以上の必須パラメーターに値が指定されていません

助言がありますか?ありがとう。

4

2 に答える 2

1

Jetについてはわかりませんが、SQL Serverやその他のプラットフォームでは、派生テーブルをエイリアス化する必要があります。言い換えれば、あなたは必要だろう

... FROM (select ... ) AS YouMustProvideAnAliasForThisDerivedTable

また、列(mypkとmyPk)について言及するたびに同じ大文字小文字を使用するように注意してください。ただし、ここでは問題にはならないようです。

于 2012-05-10T15:56:06.153 に答える
0

文字列にいくつかのエラーがありますが、Jetでは派生テーブルのエイリアスを提供する必要はありません。

csv名の行を繰り返し、一重引用符または2つの二重引用符を使用する必要がある場合に二重引用符を使用し、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, ':')) )"
于 2012-05-11T13:35:28.847 に答える