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的标准是什么?