首页 文章

使用聚合函数在AS中使用AS命名列

提问于
浏览
0

所以这是我最初的查询:

DECLARE @total AS FLOAT;
SET @total =(SELECT COUNT(*) FROM Crimes)

SELECT
    Areas.Area,
    Areas.AreaName,
    COUNT(*) AS Total, 
    Round(CONVERT(float,(COUNT(*) / @total) * 100),3)
FROM Areas
INNER JOIN Crimes
    ON(Areas.Area = Crimes.Area)
GROUP BY
    Areas.AreaName,
    Areas.Area

我做的唯一改变是将聚合函数重命名为“Percent”,并且它说两个列Area和AreaName存在问题,它们无法绑定,我不知道为什么 .

新变化:

DECLARE @total AS FLOAT;
SET @total =(SELECT COUNT(*) FROM Crimes)
SELECT
    Areas.Area,
    Areas.AreaName,
    COUNT(*) AS Total,
    Round(CONVERT(float,(COUNT(*) / @total) * 100),3) AS Percent
FROM Areas
INNER JOIN Crimes
    ON(Areas.Area = Crimes.Area)
GROUP BY
    Areas.AreaName,
    Areas.Area

1 回答

  • 2

    PERCENT 是SQL Server中的关键字 . 尝试使用其他一些别名,例如 Pct

    SELECT
        a.Area,
        a.AreaName,
        COUNT(*) AS Total,
        Round(CONVERT(float, (COUNT(*) / @total) * 100), 3) AS Pct
    FROM Areas a
    INNER JOIN Crimes c
        ON a.Area = c.Area
    GROUP BY
        a.AreaName,
        a.Area;
    

    请注意,我已经在您的查询中引入了表别名,这使得代码更简洁,更易于阅读 .

    您也可以在方括号中使用 [Percent] . 但是,这会打开这样一种风险:有人在查询你的查询时也必须逃避这个别名 . 所以,我更喜欢完全避免使用关键字列和表名 .

相关问题