T-SQL - Ошибка в регистре - PullRequest
       44

T-SQL - Ошибка в регистре

1 голос
/ 08 ноября 2011
USE NORTHWIND;
GO
SELECT SHIPCOUNTRY,[ORDERS_ID] = 
CASE ORDERID
WHEN ORDERID = 10300
THEN 'I AM FROM 10300'
WHEN ORDERID = 10400
THEN 'I AM FROM 10400'
WHEN ORDERID = 10500
THEN 'I AM FROM 10500'
ELSE 'I AM OUT OF RANGE'
END
FROM ORDERS;
GO

Ошибка - сообщение 102, уровень 15, состояние 1, строка 3 Неверный синтаксис рядом с '='.

Если у вас есть база данных northwind на вашем сервере sql, вы можете выполнить этот запрос.

Я не понимаю, где проблема. Кто-нибудь может мне помочь решить эту проблему?

Ответы [ 5 ]

5 голосов
/ 08 ноября 2011

Попробуйте это:

USE NORTHWIND; 
GO 
SELECT SHIPCOUNTRY,  
CASE ORDERID 
WHEN 10300 
THEN 'I AM FROM 10300' 
WHEN 10400 
THEN 'I AM FROM 10400' 
WHEN 10500 
THEN 'I AM FROM 10500' 
ELSE 'I AM OUT OF RANGE' 
END as OrdersId
FROM ORDERS; 
GO 

Когда вы явно указали в своем начальном операторе CASE xxxx, вы не можете повторить переменную в выражениях WHEN.Это также сработало бы:

USE NORTHWIND; 
GO 
SELECT SHIPCOUNTRY, 
CASE
WHEN ORDERID = 10300 
THEN 'I AM FROM 10300' 
WHEN ORDERID = 10400 
THEN 'I AM FROM 10400' 
WHEN ORDERID = 10500 
THEN 'I AM FROM 10500' 
ELSE 'I AM OUT OF RANGE' 
END as OrdersId
FROM ORDERS; 
GO 

Вы также не можете назначать псевдонимы подобным образом.Используйте ключевое слово AS после своего блока CASE.

РЕДАКТИРОВАТЬ: Согласно комментарию Адама Венгера, вы действительно можете написать псевдонимы типа [alias] = fieldname в своем запросе.Спасибо за исправление!

3 голосов
/ 08 ноября 2011

Конструкция case может иметь две различные формы:

case n
  when n then n
  when n then n
end

и

case
  when n = n then n
  when n = n then n
end

Вы смешиваете их. Использование:

SELECT SHIPCOUNTRY,[ORDERS_ID] = 
  CASE ORDERID
    WHEN 10300 THEN 'I AM FROM 10300'
    WHEN 10400 THEN 'I AM FROM 10400'
    WHEN 10500 THEN 'I AM FROM 10500'
    ELSE 'I AM OUT OF RANGE'
  END
FROM ORDERS
3 голосов
/ 08 ноября 2011
USE NORTHWIND;
GO
SELECT SHIPCOUNTRY,
CASE ORDERID
WHEN  10300
THEN 'I AM FROM 10300'
WHEN  10400
THEN 'I AM FROM 10400'
WHEN  10500
THEN 'I AM FROM 10500'
ELSE 'I AM OUT OF RANGE'
END as [ORDERS_ID]
FROM ORDERS;
GO
2 голосов
/ 08 ноября 2011

CASE поставляется в двух форматах: простой и поисковый.Вы смешиваете их.

http://msdn.microsoft.com/en-us/library/ms181765.aspx

1 голос
/ 08 ноября 2011
USE NORTHWIND;
GO
SELECT SHIPCOUNTRY,
CASE ORDERID 
  WHEN 10300
    THEN 'I AM FROM 10300'
  WHEN 10400
    THEN 'I AM FROM 10400'
  WHEN 10500
    THEN 'I AM FROM 10500'
  ELSE 'I AM OUT OF RANGE'
END ORDERS_ID
FROM ORDERS;
GO
...