SQL按查询分组

SQL按查询分组,sql,ms-access,group-by,Sql,Ms Access,Group By,下表有一列ArbPlWPos: +------------+ + IH-MKE + + IH-MKEEA + + IH-MKEEB + + IH-MKEPE + + IH-MKEPM + + IH-MVKE1 + + IH-MVKM1 + +------------+ 我可以在MS Access中运行语句,按前6个字母分组: SELECT left(ArbPlWPos, 6), count(left(ArbPlWPos, 6)) FROM my_table

下表有一列
ArbPlWPos

+------------+
+ IH-MKE     +
+ IH-MKEEA   +
+ IH-MKEEB   +
+ IH-MKEPE   +
+ IH-MKEPM   +
+ IH-MVKE1   +
+ IH-MVKM1   +
+------------+
我可以在MS Access中运行语句,按前6个字母分组:

SELECT left(ArbPlWPos, 6), count(left(ArbPlWPos, 6))
  FROM my_table
 GROUP BY left(ArbPlWPos, 6)

+------------+------+
+ IH-MKE     +  10  +
+ IH-MKM     +  20  +
+ IH-MVK     +  30  +
+------------+------+
如何将
IH-MVK
包含到
IH-MKE
中,因此结果应为:

+------------+------+
+ IH-MKE     +  40  +
+ IH-MKM     +  20  +
+------------+------+

这在SQL/Access中是可能的吗?

您可以按任何表达式分组,但在SELECT(需要时)和group by之后,您需要重复该操作,就像您对常用列所做的那样。例如:

  SELECT my_function_or_expression(column_A, column_B), count(1)
    FROM my_table
  GROUP BY my_function_or_expression(column_A, column_B);
在您的情况下,它将是:

  SELECT 
     CASE WHEN left(ArbPlWPos, 6) = 'IH-MVK'
          THEN 'IH-MKE'
          ELSE left(ArbPlWPos, 6) END AS cutArbPlWPos,
     count(1) AS amount
    FROM my_table
  GROUP BY CASE WHEN left(ArbPlWPos, 6) = 'IH-MVK'
                THEN 'IH-MKE'
                ELSE left(ArbPlWPos, 6) END;
您还可以使用子查询简化它

SELECT cutArbPlWPos, count(1)
  FROM (SELECT 
         CASE WHEN left(ArbPlWPos, 6) = 'IH-MVK'
              THEN 'IH-MKE'
              ELSE left(ArbPlWPos, 6) END AS cutArbPlWPos
        FROM my_table
       )
 GROUP BY cutArbPlWPos;

您可以按任何表达式分组,但在SELECT(需要时)和group by(分组方式)之后要重复该表达式,就像对常用列所做的那样。例如:

  SELECT my_function_or_expression(column_A, column_B), count(1)
    FROM my_table
  GROUP BY my_function_or_expression(column_A, column_B);
在您的情况下,它将是:

  SELECT 
     CASE WHEN left(ArbPlWPos, 6) = 'IH-MVK'
          THEN 'IH-MKE'
          ELSE left(ArbPlWPos, 6) END AS cutArbPlWPos,
     count(1) AS amount
    FROM my_table
  GROUP BY CASE WHEN left(ArbPlWPos, 6) = 'IH-MVK'
                THEN 'IH-MKE'
                ELSE left(ArbPlWPos, 6) END;
您还可以使用子查询简化它

SELECT cutArbPlWPos, count(1)
  FROM (SELECT 
         CASE WHEN left(ArbPlWPos, 6) = 'IH-MVK'
              THEN 'IH-MKE'
              ELSE left(ArbPlWPos, 6) END AS cutArbPlWPos
        FROM my_table
       )
 GROUP BY cutArbPlWPos;

您可以按任何表达式分组,但在SELECT(需要时)和group by(分组方式)之后要重复该表达式,就像对常用列所做的那样。例如:

  SELECT my_function_or_expression(column_A, column_B), count(1)
    FROM my_table
  GROUP BY my_function_or_expression(column_A, column_B);
在您的情况下,它将是:

  SELECT 
     CASE WHEN left(ArbPlWPos, 6) = 'IH-MVK'
          THEN 'IH-MKE'
          ELSE left(ArbPlWPos, 6) END AS cutArbPlWPos,
     count(1) AS amount
    FROM my_table
  GROUP BY CASE WHEN left(ArbPlWPos, 6) = 'IH-MVK'
                THEN 'IH-MKE'
                ELSE left(ArbPlWPos, 6) END;
您还可以使用子查询简化它

SELECT cutArbPlWPos, count(1)
  FROM (SELECT 
         CASE WHEN left(ArbPlWPos, 6) = 'IH-MVK'
              THEN 'IH-MKE'
              ELSE left(ArbPlWPos, 6) END AS cutArbPlWPos
        FROM my_table
       )
 GROUP BY cutArbPlWPos;

您可以按任何表达式分组,但在SELECT(需要时)和group by(分组方式)之后要重复该表达式,就像对常用列所做的那样。例如:

  SELECT my_function_or_expression(column_A, column_B), count(1)
    FROM my_table
  GROUP BY my_function_or_expression(column_A, column_B);
在您的情况下,它将是:

  SELECT 
     CASE WHEN left(ArbPlWPos, 6) = 'IH-MVK'
          THEN 'IH-MKE'
          ELSE left(ArbPlWPos, 6) END AS cutArbPlWPos,
     count(1) AS amount
    FROM my_table
  GROUP BY CASE WHEN left(ArbPlWPos, 6) = 'IH-MVK'
                THEN 'IH-MKE'
                ELSE left(ArbPlWPos, 6) END;
您还可以使用子查询简化它

SELECT cutArbPlWPos, count(1)
  FROM (SELECT 
         CASE WHEN left(ArbPlWPos, 6) = 'IH-MVK'
              THEN 'IH-MKE'
              ELSE left(ArbPlWPos, 6) END AS cutArbPlWPos
        FROM my_table
       )
 GROUP BY cutArbPlWPos;

在MS Access中,可以使用条件表达式,
iif()


在MS Access中,可以使用条件表达式,
iif()


在MS Access中,可以使用条件表达式,
iif()


在MS Access中,可以使用条件表达式,
iif()


您将IH-MVK纳入IH-MKE而不包括IH-MKM的标准是什么?您将IH-MVK纳入IH-MKE而不包括IH-MKM的标准是什么?您将IH-MVK纳入IH-MKE而不包括IH-MKM的标准是什么?您将IH-MVK纳入IH-MKE而不包括IH-MKM的标准是什么?