嗨,我有一个下表,我要按date_contact和user_id按组创建同类月份。我收到错误消息,说“ cohort_month”不是有效名称。
SELECT user_id, CONVERT(VARCHAR(7), min(date_contact), 120) AS cohort_month
from cohort
group by user_id, cohort_month
有什么建议吗?谢谢!
答案 0 :(得分:5)
您不能在select
子句中使用group by
子句中的别名。
解决此问题的方法有两种-重复group by
子句中的表达式或使用派生表(或cte):
SELECT user_id, CONVERT(CHAR(7), min(date_contact), 120) AS cohort_month
FROM cohort
GROUP BY user_id, CONVERT(CHAR(7), min(date_contact), 120)
或
WITH CTE AS
(
SELECT user_id, CONVERT(CHAR(7), min(date_contact), 120) AS cohort_month
FROM cohort
)
SELECT user_id, cohort_month
FROM CTE
GROUP BY user_id, cohort_month
但是,在这种情况下,您根本不需要group by
,只需使用distinct
:
SELECT DISTINCT user_id, CONVERT(CHAR(7), min(date_contact), 120) AS cohort_month
FROM cohort
还有一个注释:我已经将您的varchar(7)
更改为char(7)
-如果您知道长度是固定的,请不要使用varchar。