0

私の vba プロジェクトには、解決できない SQL の問題があります。彼の ID に加えて、別の一意の参照もあるテーブルがあります。この列の名前は「Ref_Q」で、テキストは「13/45」です。その年から13人が参加し、もう1つのユニークな数がありました。ここで、テーブルから最大の Ref_Q を取得したくありません。最初に私はこれを得ました:

SELECT * FROM Reports WHERE Ref_Q = (SELECT MAX(Ref_Q) FROM Reports);

私が 99 より大きい Ref_Q を取得するまで、すべてがうまくいきました。だから私はこのようなことを試しました:

SELECT CAST(SUBSTRING(MAX(Ref_Q),4) AS Int) FROM Reports

しかし、今はエラーが発生し続けます:

Syntax error (missing operator) in query expression 'CAST(SUBSTRING(MAX(Ref_Q),4) AS Int)'
4

1 に答える 1

1

次のクエリを試してください (SQL Server 構文を使用):

SELECT *
FROM Reports
WHERE Ref_Q = (SELECT top 1 Ref_Q
               FROM Reports r
               ORDER BY left(Ref_Q, 2) desc,
                        cast(substring(Ref_Q, 4, len(Ref_Q) - 3) as int) desc
              );

これは、ルールに従って最大値を取得するorder by代わりに使用します。max()ちなみに、 と を使用して数字をゼロパディングすることでこれを修正でき '13\0102'ます'13\0099'

ちなみに、必要な行だけが必要な場合は、サブクエリを使用できます。

               SELECT top 1 *
               FROM Reports r
               ORDER BY left(Ref_Q, 2) desc,
                        cast(substring(Ref_Q, 4, len(Ref_Q) - 3) as int) desc

編集:

これは、それらが動作していることを示す SQL Fiddle です

これで、アクセスというラベルが付けられていることがわかりました。おっとっと。私はこれがうまくいくと思います:

SELECT *
FROM Reports
WHERE Ref_Q = (SELECT top 1 Ref_Q
               FROM Reports r
               ORDER BY left(Ref_Q, 2) desc,
                        cint(mid(Ref_Q, 4, len(Ref_Q) - 3)) desc
              );

(ただし、cast()私が知る限り、元のクエリは Access にないものを使用していることに注意してください。)

于 2013-09-12T11:53:05.690 に答える