2011-11-08 49 views
1
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附近有语法错误 '='。T-SQL - 错误上Case语句

如果你在你的sql server中有Northwind Database,你可以执行这个查询。

我不明白问题在哪里。任何人都可以帮我解决这个问题吗?

回答

5

试试这个:

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 

您也不能指定这样的别名。在CASE块之后使用AS关键字。

编辑:根据亚当温格的评论,你确实可以在你的查询中写入别名[alias] = fieldname。感谢您的更正!

+0

鲨鱼,我敢肯定,你可以使用'[别名] = CASE语句'别名,尽管我更喜欢'END'后的别名。 –

+0

@AdamWenger我不知道。我必须测试一下!感谢您的纠正,这些小小的不太知名的信息让我们变得更好!再次感谢。 – 2011-11-09 01:25:22

+0

@AdamWenger果然,你是对的。我修改了我的答案。谢谢! – 2011-11-09 01:27:25

3
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 
+0

非常感谢你。此代码工作正常.. – mark

1
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 
3

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