-1

DB テーブル 'LabelInfo'

ID      Labels    
1       TRPKLM003 
2       JPRECM001 
3       MNTORM005 
4       JPRECM004 
5       MNTORM002 
6       JPRECM003 
7       TRPKLM002 
8       TRPKLM004 

列ラベルは固定長です。結果として次のデータを返したいと思います。

TRPKLM004
MNTORM005
JPRECM004

一致する最初の 6 文字と残りの 3 文字の最大値をグループ化して、行のみを返すことができるアクセス クエリを作成します。またはテーブルからすべての行を返す場合、C# で結果をフィルタリングする最適化された方法が必要です

4

1 に答える 1

1

データベース エンジンは、フィールドの 2 つのコンポーネントを分割できLabelsます。

SELECT
    Left(Labels, 6) AS prefix_string
    Val(Right(Labels, 3)) AS suffix_nmbr
FROM LabelInfo;

それをクエリのサブクエリとして使用しGROUP BYます。

SELECT
    sub.prefix_string,
    Max(sub.suffix_nmbr) AS MaxOfSuffix_nmbr
FROM
    (
        SELECT
            Left(Labels, 6) AS prefix_string
            Val(Right(Labels, 3)) AS suffix_nmbr
        FROM LabelInfo
    ) AS sub
GROUP BY sub.prefix_string;

C# のクライアント側コードで 2 つの部分を再結合するのが不便な場合は、サブクエリまでのすべてを db エンジンに実行させることができます。

SELECT
    sub2.prefix_string
        & Format(sub2.MaxOfSuffix_nmbr, '000')
        AS labels_alias
FROM
    (
        SELECT
            sub1.prefix_string,
            Max(sub1.suffix_nmbr) AS MaxOfSuffix_nmbr
        FROM
            (
                SELECT
                    Left(Labels, 6) AS prefix_string
                    Val(Right(Labels, 3)) AS suffix_nmbr
                FROM LabelInfo
            ) AS sub1
        GROUP BY sub1.prefix_string
    ) AS sub2; 
于 2012-10-12T15:36:19.403 に答える