Sql 列名错误

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

我有下面的代码,我试图将客户的出生日期分为几代,由于某种原因,它给了我一个列名错误,这就是我在编写case语句时总是这样做的,但现在它似乎不起作用。我遇到了一个无法解析查询文本的错误,我相信这与代码的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