我想按列别名对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
答案 0 :(得分:4)
对于分组的直接问题,您需要按相同的表达式或计算新列进行分组,或者从派生表中使用它。
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)
。
答案 1 :(得分:2)
你的问题是“变量”,但我认为你的意思是列别名。仅供参考。
使用实际的列定义应该可以正常工作。未经测试,但这应该做你需要的:
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
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