将Sql子查询与case语句一起使用时出现问题
我在执行代码时遇到问题, 附近的语法不正确 我现在正在学习SQL,因此任何帮助都将不胜感激。问题不在于case表达式。子查询缺少表别名。此外,日期常量需要使用单引号:将Sql子查询与case语句一起使用时出现问题,sql,sql-server,Sql,Sql Server,我在执行代码时遇到问题, 附近的语法不正确 我现在正在学习SQL,因此任何帮助都将不胜感激。问题不在于case表达式。子查询缺少表别名。此外,日期常量需要使用单引号: select Firstname,LastName,age, case when age < 40 and age >= 25 then 'Young' when age < 60 and age >= 40 then 'No More Young' when age &g
select Firstname,LastName,age, case
when age < 40 and age >= 25 then 'Young'
when age < 60 and age >= 40 then 'No More Young'
when age >= 60 then 'Retired'
else 'Dont Care'
END as flag
from (select FirstName,LastName,DATEDIFF(year,2018-08-26,BirthDate) as age from ContosoRetailDW.dbo.DimCustomer)
只映射了三个范围,这并不是一个很大的简化。问题不在于大小写表达式。子查询缺少表别名。此外,日期常量需要使用单引号:
select Firstname,LastName,age, case
when age < 40 and age >= 25 then 'Young'
when age < 60 and age >= 40 then 'No More Young'
when age >= 60 then 'Retired'
else 'Dont Care'
END as flag
from (select FirstName,LastName,DATEDIFF(year,2018-08-26,BirthDate) as age from ContosoRetailDW.dbo.DimCustomer)
这并不是一个简单的问题,因为只映射了三个范围。您应该在查询结束时添加为客户。原因是,每个子查询必须有一个别名。
如果其他所有内容都正确,我不确定此版本的DATEDIFF是否可以使用。您应该在查询结束时添加为客户。原因是,每个子查询必须有一个别名。
如果其他所有内容都是正确的,我不确定这个版本的DATEDIFF是否可以使用。正如前面指出的,原因是您的子查询没有别名,但您根本不需要在此处使用子查询。只需选择值。此外,您的case表达式可以大大简化。而且您的年龄计算不正确。正如前面指出的,原因是您的子查询没有别名,但您根本不需要子查询。只需选择值。此外,您的case表达式可以大大简化。你的年龄计算不正确。
select Firstname, LastName, age,
(case when age >= 25 and age < 40 then 'Young'
when age < 60 then 'No More Young'
when age >= 60 then 'Retired'
else 'Dont Care'
end) as flag
from (select FirstName, LastName, DATEDIFF(year, '2018-08-26', BirthDate) as age
from ContosoRetailDW.dbo.DimCustomer
) c;