在SQL Server中按两列分组

时间:2018-12-19 08:38:00

标签: sql-server

嗨,我有一个下表,我要按date_contact和user_id按组创建同类月份。我收到错误消息,说“ cohort_month”不是有效名称。 enter image description here

SELECT user_id, CONVERT(VARCHAR(7), min(date_contact), 120) AS cohort_month
from cohort
group by user_id, cohort_month

有什么建议吗?谢谢!

1 个答案:

答案 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。