Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Access DB Query通过分组子字符串并选择最大值来筛选列数据_C#_.net_Ms Access - Fatal编程技术网

C# Access DB Query通过分组子字符串并选择最大值来筛选列数据

C# Access DB Query通过分组子字符串并选择最大值来筛选列数据,c#,.net,ms-access,C#,.net,Ms Access,数据库表“LabelInfo” ID Labels 1 TRPKLM003 2 JPRECM001 3 MNTORM005 4 JPRECM004 5 MNTORM002 6 JPRECM003 7 TRPKLM002 8 TRPKLM004 列标签的长度是固定的。我想返回以下数据作为结果: TRPKLM004 MNTORM005 JPRECM004 我想编写一个

数据库表“LabelInfo”

ID      Labels    
1       TRPKLM003 
2       JPRECM001 
3       MNTORM005 
4       JPRECM004 
5       MNTORM002 
6       JPRECM003 
7       TRPKLM002 
8       TRPKLM004 
列标签的长度是固定的。我想返回以下数据作为结果:

TRPKLM004
MNTORM005
JPRECM004

我想编写一个access查询,通过将匹配前6个字符和其余3个字符的最大值分组,只返回行。或者,如果我返回表中的所有行,我希望使用一种优化的方法来过滤C#

中的结果,db引擎可以拆分
标签
字段的两个组件

SELECT
    Left(Labels, 6) AS prefix_string
    Val(Right(Labels, 3)) AS suffix_nmbr
FROM LabelInfo;
将其用作
分组依据
查询的子查询

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#客户端代码中重新组合这两个部分不方便,那么可以让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; 

我认为你的问题有点含糊不清。到目前为止,我按desc的顺序重新修改了所有的行。这只是以排序的方式给了我数据。然后在我的代码中,我通过在每行上运行for循环来过滤数据,将标签的子字符串(标签,0,6)与其余项进行比较。由于其已排序,如果其找不到相同的标签,则返回该项目。。但是这会将每一行与所有行进行比较,并花费太多时间返回结果感谢您的查询。。你太棒了!!唯一的问题是我的前缀被截断了,就像。。。007返回为7,003返回为3。。我可以要3个满分吗。。因为我需要整个字符串作为结果,这是因为我将字符串部分转换为数字。您可以将其转换回“000”格式的字符串,并将其与“prefix_string”片段连接起来。查看最后一个(未测试的)查询版本是否返回您想要的结果。是。。知道了!!非常感谢。我花了好几个小时才让它正常工作!!你节省了很多时间!!