Sql 列名错误
我有下面的代码,我试图将客户的出生日期分为几代,由于某种原因,它给了我一个列名错误,这就是我在编写case语句时总是这样做的,但现在它似乎不起作用。我遇到了一个无法解析查询文本的错误,我相信这与代码的GenY部分有关Sql 列名错误,sql,sql-server,case-when,Sql,Sql Server,Case When,我有下面的代码,我试图将客户的出生日期分为几代,由于某种原因,它给了我一个列名错误,这就是我在编写case语句时总是这样做的,但现在它似乎不起作用。我遇到了一个无法解析查询文本的错误,我相信这与代码的GenY部分有关 SELECT Birthdate, ( CASE WHEN Birthdate <= '12/31/2964' THEN BabyBoomer WHEN Birthdate >= '1/1/1980' THEN GenY
SELECT Birthdate, (
CASE WHEN Birthdate <= '12/31/2964' THEN BabyBoomer
WHEN Birthdate >= '1/1/1980' THEN GenY
WHEN Birthdate >='1/1/1965' AND <='12/31/1979' THEN GenY
ELSE NULL
END) AS Generation
FROM dbo.All_Employee_Detail
GROUP BY Birthdate
选择出生日期(
出生日期为“1980年1月1日”的情况下,则为GenY
当Birthdate>='1/1/1965'和如果这些值(BabyBoomer
,GenY
)是字符串而不是列,则需要用单引号将其括起来,因为它们是字符串文本而不是标识符
SELECT Birthdate,
(CASE WHEN Birthdate <= '12/31/2964'
THEN 'BabyBoomer'
WHEN Birthdate >= '1/1/1980'
THEN 'GenY'
WHEN Birthdate BETWEEN '1/1/1965' AND '12/31/1979'
THEN 'GenY'
ELSE NULL
END) AS Generation
FROM dbo.All_Employee_Detail
GROUP BY Birthdate
我想可能是您的日期字符串或列名,或者两者都有。请尝试将它们转换为ISO格式(即yyyymmdd
),如果BabyBoomer
和GenY
不是列名,则需要使用将它们标记为字符串。
另外,CASE
语句应该返回一个单一数据类型
SELECT Birthdate, (
CASE WHEN Birthdate >= '19650101' AND Birthdate <= '19800101' THEN 'GenY'
WHEN Birthdate > '19800101' AND Birthdate <= '29641231' THEN 'BabyBoomer'
ELSE NULL
END) AS Generation
FROM dbo.All_Employee_Detail
GROUP BY Birthdate
选择出生日期(
案例当Birthdate>='19650101'和Birthdate'19800101'和Birthdate查看您的查询时,我认为您可以按照JW所说的做,并且仍然简化您的查询……因为似乎您在不需要的情况下使用另一个子句,因为两个子句生成相同的结果。
哦,我们离2964年还有一点距离。:p
SELECT Birthdate,
(CASE WHEN Birthdate <= '12/31/1964'
THEN 'BabyBoomer'
WHEN Birthdate > '12/31/1964'
THEN 'GenY'
ELSE NULL
END) AS Generation
FROM dbo.All_Employee_Detail
GROUP BY Birthdate
选择出生日期,
(出生日期为'1964年12月31日'
然后是“GenY”
否则无效
结束)作为一代
来自dbo.所有员工详细信息
按出生日期分组
这确实解决了when问题,但它无助于解决涉及when Birthdate>='1/1/1965'的无法解析查询文本的问题,如果我错了,请纠正我,我认为此查询仅适用于美国文化。@Kaf文化不是这里的问题。我发现的问题是:文本不能用单引号括起来
和在>=的有效用法,我已经更新了我的。对于所有生日@Kaf,您的查询将返回'BabyBoomer'
,这行吗?生日>'19800101'和
SELECT Birthdate,
(CASE WHEN Birthdate <= '12/31/1964'
THEN 'BabyBoomer'
WHEN Birthdate > '12/31/1964'
THEN 'GenY'
ELSE NULL
END) AS Generation
FROM dbo.All_Employee_Detail
GROUP BY Birthdate