我的下表有一列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可以以某种方式实现吗?
答案 0 :(得分:2)
在MS Access中,您可以使用条件表达式new_visitonly
:
iif()
答案 1 :(得分:1)
您可以按任何表达式进行分组,但是您需要在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;