带别名的案例功能

Case function with an alias

我希望将 CASE 语句与一个由两列的商产生的别名一起使用。 我写的代码如下,但是 returns 出错了。 谁能帮我解决这个问题?

SELECT TOP 5(ROUND(Registered_Students/Total_Student * 100,2)) AS Porcentaje, C.Total_Student, C.Registered_Students, S.Subject_Name, DATEPART(Year, C.Date) AS Año,
    CASE WHEN Porcentaje >= 75 THEN 'Elected'
         WHEN Porcentaje >= 50 THEN 'Elected 1'
         ELSE 'Not elected' AS Elections
FROM Cohort AS C
INNER JOIN Subject AS S
ON S.Id_Subject = C.Id_Subject
ORDER BY Porcentaje

你必须插入这个词; 'END'行尾

SELECT C.Total_Student, C.Registered_Students, S.Subject_Name, DATEPART(Year, C.Date) AS Año,
    CASE WHEN Porcentaje >= 75 THEN 'Elected'
         WHEN Porcentaje >= 50 THEN 'Elected 1'
         ELSE 'Not elected' END AS Elections
FROM Cohort AS C
INNER JOIN Subject AS S
ON S.Id_Subject = C.Id_Subject
ORDER BY Porcentaje

as-is

ELSE 'Not elected' AS Elections

to-be

ELSE 'Not elected' END AS Elections

SQL 服务器案例语句的语法不正确:

SELECT column1,
             column2,
               CASE WHEN CONDITION THEN 'Value1'
               ELSE 'Value2' END AS columnX
  FROM table

您只需在语法中添加 END 即可正常工作

标准的大小写语法是

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;

您可以这样写来修复您的查询

  • 查询会更容易理解
  • 不同的缩进更易于修改和阅读
SELECT TOP 5
  (ROUND(Registered_Students / Total_Student * 100, 2)) AS Porcentaje
, C.Total_Student
, C.Registered_Students
, S.Subject_Name
, DATEPART(YEAR, C.Date) AS Año,
    (CASE
        WHEN Porcentaje >= 75 THEN 'Elected'
        WHEN Porcentaje >= 50 THEN 'Elected 1'
        ELSE 'Not elected' END) AS Elections
FROM Cohort AS C
INNER JOIN Subject AS S
ON S.Id_Subject = C.Id_Subject
ORDER BY Porcentaje

列别名不能在创建时在同一个 SELECT 子句中引用。有一个 derived table(即 FROM 子句中的子查询),您可以在其中创建 Porcentaje 列。

SELECT TOP 5 dt.*,
       CASE WHEN Porcentaje >= 75 THEN 'Elected'
            WHEN Porcentaje >= 50 THEN 'Elected 1'
            ELSE 'Not elected'
       END AS Elections
FROM
(
    select
        (ROUND(Registered_Students/Total_Student * 100,2)) AS Porcentaje,
        C.Total_Student, C.Registered_Students, S.Subject_Name, DATEPART(Year, C.Date) AS Año
    FROM Cohort AS C
    INNER JOIN Subject AS S
    ON S.Id_Subject = C.Id_Subject
) dt
ORDER BY Porcentaje