2013-02-28 2 views
1

У меня есть следующий код, в котором я пытаюсь отделить даты рождения клиентов от поколений и по какой-то причине он дает мне ошибку с именем столбца, вот как я всегда писал свой случай, когда заявления, но теперь это похоже, не работает. И я получаю не в состоянии разобрать текст ошибки запроса, который я считаю что-то делать с частью Гены кодаОшибка имени столбца

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 

ответ

3

, если эти значения (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 

UPDATE 1

SELECT Birthdate, 
     (CASE WHEN Birthdate BETWEEN '1/1/1980' AND '12/31/2964' 
       THEN 'BabyBoomer' 
      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 
+0

Это исправил случай, когда проблема, но оно не поможет не смог разобрать текст запроса проблемы с участием Когда рождения> = «1/1/1965» AND <= «12/31/1979» – user2119980

+0

Извините, не видел этого, см. Обновление. используйте «МЕЖДУ». –

+0

Исправьте меня, если я ошибаюсь, я думаю, что этот запрос работает только на нас. – Kaf

0

Я думаю, что это может быть ваша дата строки или имена столбцов или обоих. Постарайтесь, чтобы получить их в ISO format (то есть, yyyymmdd), и если BabyBoomer и GenY не имена столбцов, то вам нужно пометить их как строку с '

Также CASE заявление должно возвратногоsingle data type.

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 
0

Глядя на ваш запрос, я думал, что вы могли бы сделать, как сказал JW и еще упростить запрос ... потому что кажется, что вы используете другой пункт, когда нет необходимости в том, что, поскольку два положения порождает то же самое результат. О, и мы все еще немного далеки от 2964 года. : Р

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 
Смежные вопросы