按列别名分组

问题描述

对于立即出现的分组问题,您需要使用相同的表达式对新列进行分组或对新列进行计算,或者从派生表中使用它。

SELECT MonthYear
FROM (  SELECT Columns,
            CASE
            WHEN Date IS NULL
            THEN 'EMPTY'
            ELSE
                CASE
                WHEN Date = '1/1/1753'
                THEN 'UNAVAILABLE'
                ELSE CAST(MONTH(Date) as varchar(2))+
                     '/'+ CAST(YEAR(Date) as varchar(4))
                END
            END AS MonthYear
        FROM tbltablename) T
GROUP BY MonthYear

另一方面,VARCHAR(MAX)如果不需要,则不应使用。

解决方法

我想按列别名对sql语句进行分组。实质上,我希望以下内容在逻辑上能够正常运行,但不允许按使用as创建的列进行分组。(无效的列名)。有人提示吗?

SELECT 
    CASE
    WHEN Date IS NULL
    THEN 'EMPTY'
    ELSE
        CASE
        WHEN Date = '1/1/1753'
        THEN 'UNAVAILABLE'
        ELSE CAST(MONTH(Date) as varchar(MAX))+
             '/'+ CAST(YEAR(Date) as varchar(MAX))
        END
    END AS MonthYear
FROM tbltablename
GROUP BY MonthYear